capybara 3.32.2 → 3.33.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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +21 -1
  3. data/README.md +10 -3
  4. data/lib/capybara.rb +17 -7
  5. data/lib/capybara/cucumber.rb +1 -1
  6. data/lib/capybara/minitest.rb +2 -3
  7. data/lib/capybara/node/actions.rb +16 -20
  8. data/lib/capybara/node/matchers.rb +4 -6
  9. data/lib/capybara/queries/selector_query.rb +8 -1
  10. data/lib/capybara/queries/style_query.rb +1 -1
  11. data/lib/capybara/queries/text_query.rb +6 -0
  12. data/lib/capybara/registration_container.rb +44 -0
  13. data/lib/capybara/selector.rb +10 -1
  14. data/lib/capybara/selector/definition.rb +5 -4
  15. data/lib/capybara/selector/definition/button.rb +1 -0
  16. data/lib/capybara/selector/definition/fillable_field.rb +1 -1
  17. data/lib/capybara/selector/definition/link.rb +8 -0
  18. data/lib/capybara/selector/definition/table.rb +1 -1
  19. data/lib/capybara/selector/selector.rb +4 -0
  20. data/lib/capybara/selenium/driver.rb +2 -0
  21. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +7 -9
  22. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +7 -9
  23. data/lib/capybara/selenium/node.rb +3 -2
  24. data/lib/capybara/selenium/nodes/firefox_node.rb +1 -1
  25. data/lib/capybara/selenium/patches/logs.rb +3 -5
  26. data/lib/capybara/session.rb +3 -3
  27. data/lib/capybara/session/config.rb +3 -1
  28. data/lib/capybara/spec/public/test.js +7 -0
  29. data/lib/capybara/spec/session/click_button_spec.rb +11 -0
  30. data/lib/capybara/spec/session/has_button_spec.rb +16 -0
  31. data/lib/capybara/spec/session/has_current_path_spec.rb +2 -2
  32. data/lib/capybara/spec/session/has_field_spec.rb +16 -0
  33. data/lib/capybara/spec/session/has_select_spec.rb +4 -4
  34. data/lib/capybara/spec/session/has_selector_spec.rb +4 -4
  35. data/lib/capybara/spec/session/node_spec.rb +6 -6
  36. data/lib/capybara/spec/spec_helper.rb +1 -0
  37. data/lib/capybara/spec/test_app.rb +14 -18
  38. data/lib/capybara/spec/views/form.erb +2 -1
  39. data/lib/capybara/spec/views/with_dragula.erb +3 -1
  40. data/lib/capybara/spec/views/with_js.erb +1 -0
  41. data/lib/capybara/version.rb +1 -1
  42. data/spec/capybara_spec.rb +1 -1
  43. data/spec/dsl_spec.rb +14 -1
  44. data/spec/minitest_spec.rb +1 -1
  45. data/spec/rack_test_spec.rb +1 -0
  46. data/spec/rspec/shared_spec_matchers.rb +63 -51
  47. data/spec/selector_spec.rb +1 -1
  48. data/spec/selenium_spec_chrome.rb +0 -2
  49. data/spec/server_spec.rb +41 -49
  50. data/spec/shared_selenium_session.rb +10 -1
  51. data/spec/spec_helper.rb +1 -1
  52. metadata +4 -3
@@ -70,8 +70,6 @@ Capybara::SpecHelper.run_specs TestSessions::Chrome, CHROME_DRIVER.to_s, capybar
70
70
  pending "Chrome headless doesn't support maximize" if ENV['HEADLESS']
71
71
  when /Capybara::Window#fullscreen should be able to fullscreen the window/
72
72
  skip 'Chromedriver hangs on attempts to fullscreen in headless mode' if ENV['HEADLESS']
73
- when /details non-summary descendants should be non-visible/
74
- pending 'Chromedriver built-in is_displayed is currently broken' if ENV['W3C'] == 'false'
75
73
  when /node #right_click delay should delay the mouse up/
76
74
  skip "Legacy selenium doesn't support separate right button down/up" if ENV['W3C'] == 'false'
77
75
  end
@@ -75,25 +75,21 @@ RSpec.describe Capybara::Server do
75
75
  end
76
76
 
77
77
  it 'should handle that getting available ports fails randomly' do
78
- begin
79
- # Use a port to force a EADDRINUSE error to be generated
80
- server = TCPServer.new('0.0.0.0', 0)
81
- server_port = server.addr[1]
82
- d_server = instance_double('TCPServer', addr: [nil, server_port, nil, nil], close: nil)
83
- call_count = 0
84
- allow(TCPServer).to receive(:new).and_wrap_original do |m, *args|
85
- begin
86
- call_count.zero? ? d_server : m.call(*args)
87
- ensure
88
- call_count += 1
89
- end
90
- end
91
-
92
- port = described_class.new(Object.new, host: '0.0.0.0').port
93
- expect(port).not_to eq(server_port)
78
+ # Use a port to force a EADDRINUSE error to be generated
79
+ server = TCPServer.new('0.0.0.0', 0)
80
+ server_port = server.addr[1]
81
+ d_server = instance_double('TCPServer', addr: [nil, server_port, nil, nil], close: nil)
82
+ call_count = 0
83
+ allow(TCPServer).to receive(:new).and_wrap_original do |m, *args|
84
+ call_count.zero? ? d_server : m.call(*args)
94
85
  ensure
95
- server&.close
86
+ call_count += 1
96
87
  end
88
+
89
+ port = described_class.new(Object.new, host: '0.0.0.0').port
90
+ expect(port).not_to eq(server_port)
91
+ ensure
92
+ server&.close
97
93
  end
98
94
 
99
95
  it 'should return its #base_url' do
@@ -104,29 +100,27 @@ RSpec.describe Capybara::Server do
104
100
  end
105
101
 
106
102
  it 'should support SSL' do
107
- begin
108
- key = File.join(Dir.pwd, 'spec', 'fixtures', 'key.pem')
109
- cert = File.join(Dir.pwd, 'spec', 'fixtures', 'certificate.pem')
110
- Capybara.server = :puma, { Host: "ssl://#{Capybara.server_host}?key=#{key}&cert=#{cert}" }
111
- app = proc { |_env| [200, {}, ['Hello SSL Server!']] }
112
- server = described_class.new(app).boot
113
-
114
- expect do
115
- Net::HTTP.start(server.host, server.port, max_retries: 0) { |http| http.get('/__identify__') }
116
- end.to(raise_error do |e|
117
- expect(e.is_a?(EOFError) || e.is_a?(Net::ReadTimeout)).to be true
118
- end)
103
+ key = File.join(Dir.pwd, 'spec', 'fixtures', 'key.pem')
104
+ cert = File.join(Dir.pwd, 'spec', 'fixtures', 'certificate.pem')
105
+ Capybara.server = :puma, { Host: "ssl://#{Capybara.server_host}?key=#{key}&cert=#{cert}" }
106
+ app = proc { |_env| [200, {}, ['Hello SSL Server!']] }
107
+ server = described_class.new(app).boot
119
108
 
120
- res = Net::HTTP.start(server.host, server.port, use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE) do |https|
121
- https.get('/')
122
- end
109
+ expect do
110
+ Net::HTTP.start(server.host, server.port, max_retries: 0) { |http| http.get('/__identify__') }
111
+ end.to(raise_error do |e|
112
+ expect(e.is_a?(EOFError) || e.is_a?(Net::ReadTimeout)).to be true
113
+ end)
123
114
 
124
- expect(res.body).to include('Hello SSL Server!')
125
- uri = ::Addressable::URI.parse(server.base_url)
126
- expect(uri.to_hash).to include(scheme: 'https', host: server.host, port: server.port)
127
- ensure
128
- Capybara.server = :default
115
+ res = Net::HTTP.start(server.host, server.port, use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE) do |https|
116
+ https.get('/')
129
117
  end
118
+
119
+ expect(res.body).to include('Hello SSL Server!')
120
+ uri = ::Addressable::URI.parse(server.base_url)
121
+ expect(uri.to_hash).to include(scheme: 'https', host: server.host, port: server.port)
122
+ ensure
123
+ Capybara.server = :default
130
124
  end
131
125
 
132
126
  context 'When Capybara.reuse_server is true' do
@@ -224,19 +218,17 @@ RSpec.describe Capybara::Server do
224
218
  end
225
219
 
226
220
  it 'should raise server errors when the server errors before the timeout' do
227
- begin
228
- Capybara.register_server :kaboom do
229
- sleep 0.1
230
- raise 'kaboom'
231
- end
232
- Capybara.server = :kaboom
233
-
234
- expect do
235
- described_class.new(proc { |e| }).boot
236
- end.to raise_error(RuntimeError, 'kaboom')
237
- ensure
238
- Capybara.server = :default
221
+ Capybara.register_server :kaboom do
222
+ sleep 0.1
223
+ raise 'kaboom'
239
224
  end
225
+ Capybara.server = :kaboom
226
+
227
+ expect do
228
+ described_class.new(proc { |e| }).boot
229
+ end.to raise_error(RuntimeError, 'kaboom')
230
+ ensure
231
+ Capybara.server = :default
240
232
  end
241
233
 
242
234
  it 'should raise an error when there are pending requests' do
@@ -160,6 +160,15 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
160
160
  fill_options: { clear: :none })
161
161
  expect(session.find(:fillable_field, 'form_first_name').value).to eq('JohnHarry')
162
162
  end
163
+
164
+ it 'works with rapid fill' do
165
+ pending 'Safari overwrites by default - need to figure out a workaround' if safari?(session)
166
+
167
+ long_string = (0...60).map { |i| ((i % 26) + 65).chr }.join
168
+ session.visit('/form')
169
+ session.fill_in('form_first_name', with: long_string, fill_options: { clear: :none })
170
+ expect(session.find(:fillable_field, 'form_first_name').value).to eq('John' + long_string)
171
+ end
163
172
  end
164
173
 
165
174
  describe '#fill_in with Date' do
@@ -425,7 +434,7 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
425
434
  it 'can find html5 svg elements' do
426
435
  session.visit('with_html5_svg')
427
436
  expect(session).to have_selector(:element, :svg)
428
- expect(session).to have_selector(:element, :rect, visible: true)
437
+ expect(session).to have_selector(:element, :rect, visible: :visible)
429
438
  expect(session).to have_selector(:element, :circle)
430
439
  expect(session).to have_selector(:element, :linearGradient, visible: :all)
431
440
  end
@@ -46,7 +46,7 @@ module Capybara
46
46
  end
47
47
 
48
48
  def edge?(session)
49
- browser_name(session).match?(/^edge/)
49
+ browser_name(session).to_s.start_with?('edge')
50
50
  end
51
51
 
52
52
  def legacy_edge?(session)
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.32.2
4
+ version: 3.33.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Walpole
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
12
  - gem-public_cert.pem
13
- date: 2020-05-16 00:00:00.000000000 Z
13
+ date: 2020-06-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable
@@ -450,6 +450,7 @@ files:
450
450
  - lib/capybara/rack_test/form.rb
451
451
  - lib/capybara/rack_test/node.rb
452
452
  - lib/capybara/rails.rb
453
+ - lib/capybara/registration_container.rb
453
454
  - lib/capybara/registrations/drivers.rb
454
455
  - lib/capybara/registrations/patches/puma_ssl.rb
455
456
  - lib/capybara/registrations/servers.rb
@@ -738,7 +739,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
738
739
  requirements:
739
740
  - - ">="
740
741
  - !ruby/object:Gem::Version
741
- version: 2.4.0
742
+ version: 2.5.0
742
743
  required_rubygems_version: !ruby/object:Gem::Requirement
743
744
  requirements:
744
745
  - - ">="