capybara 3.37.1 → 3.38.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.
- checksums.yaml +4 -4
- data/History.md +34 -4
- data/README.md +23 -11
- data/lib/capybara/helpers.rb +5 -1
- data/lib/capybara/node/base.rb +2 -1
- data/lib/capybara/queries/base_query.rb +2 -2
- data/lib/capybara/queries/selector_query.rb +4 -2
- data/lib/capybara/queries/text_query.rb +1 -1
- data/lib/capybara/rack_test/browser.rb +8 -2
- data/lib/capybara/rack_test/form.rb +29 -7
- data/lib/capybara/registrations/servers.rb +17 -9
- data/lib/capybara/selector/definition.rb +1 -1
- data/lib/capybara/selector/filter_set.rb +4 -5
- data/lib/capybara/selector/regexp_disassembler.rb +2 -5
- data/lib/capybara/selenium/driver.rb +3 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +2 -4
- data/lib/capybara/selenium/logger_suppressor.rb +4 -0
- data/lib/capybara/selenium/node.rb +52 -15
- data/lib/capybara/selenium/nodes/firefox_node.rb +2 -2
- data/lib/capybara/selenium/nodes/safari_node.rb +2 -2
- data/lib/capybara/server/animation_disabler.rb +20 -20
- data/lib/capybara/server/middleware.rb +1 -1
- data/lib/capybara/session/config.rb +3 -1
- data/lib/capybara/session.rb +11 -9
- data/lib/capybara/spec/session/attach_file_spec.rb +6 -0
- data/lib/capybara/spec/session/check_spec.rb +1 -0
- data/lib/capybara/spec/session/current_scope_spec.rb +1 -1
- data/lib/capybara/spec/session/fill_in_spec.rb +6 -0
- data/lib/capybara/spec/session/find_spec.rb +1 -1
- data/lib/capybara/spec/session/has_ancestor_spec.rb +2 -2
- data/lib/capybara/spec/session/has_button_spec.rb +6 -0
- data/lib/capybara/spec/session/has_link_spec.rb +6 -0
- data/lib/capybara/spec/session/has_select_spec.rb +6 -0
- data/lib/capybara/spec/session/has_text_spec.rb +4 -8
- data/lib/capybara/spec/session/node_spec.rb +24 -1
- data/lib/capybara/spec/session/reset_session_spec.rb +13 -0
- data/lib/capybara/spec/session/within_spec.rb +13 -0
- data/lib/capybara/spec/spec_helper.rb +8 -2
- data/lib/capybara/spec/test_app.rb +25 -6
- data/lib/capybara/spec/views/form.erb +13 -0
- data/lib/capybara/spec/views/with_html.erb +2 -2
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara.rb +4 -2
- data/spec/capybara_spec.rb +12 -0
- data/spec/counter_spec.rb +35 -0
- data/spec/dsl_spec.rb +2 -0
- data/spec/minitest_spec.rb +4 -0
- data/spec/minitest_spec_spec.rb +4 -0
- data/spec/per_session_config_spec.rb +1 -1
- data/spec/rack_test_spec.rb +8 -0
- data/spec/rspec/shared_spec_matchers.rb +1 -1
- data/spec/rspec_spec.rb +2 -2
- data/spec/selector_spec.rb +2 -2
- data/spec/selenium_spec_chrome.rb +2 -0
- data/spec/selenium_spec_chrome_remote.rb +4 -2
- data/spec/selenium_spec_edge.rb +2 -0
- data/spec/selenium_spec_firefox.rb +11 -5
- data/spec/selenium_spec_firefox_remote.rb +4 -2
- data/spec/selenium_spec_ie.rb +3 -1
- data/spec/selenium_spec_safari.rb +2 -0
- data/spec/shared_selenium_session.rb +3 -4
- metadata +3 -2
data/spec/dsl_spec.rb
CHANGED
@@ -15,6 +15,8 @@ Capybara::SpecHelper.run_specs TestClass.new, 'DSL', capybara_skip: %i[
|
|
15
15
|
pending "Nokogiri doesn't support case insensitive CSS attribute matchers"
|
16
16
|
when /#click_button should follow permanent redirects that maintain method/
|
17
17
|
pending "Rack < 2 doesn't support 308" if Gem.loaded_specs['rack'].version < Gem::Version.new('2.0.0')
|
18
|
+
when /#attach_file with multipart form should send prior hidden field if no file submitted/
|
19
|
+
skip 'Rack-test < 2 needs an empty file to detect multipart form' if Gem.loaded_specs['rack-test'].version < Gem::Version.new('2.0.0')
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
data/spec/minitest_spec.rb
CHANGED
data/spec/minitest_spec_spec.rb
CHANGED
@@ -12,7 +12,7 @@ RSpec.describe Capybara::SessionConfig do
|
|
12
12
|
default_selector default_max_wait_time ignore_hidden_elements
|
13
13
|
automatic_reload match exact raise_server_errors visible_text_only
|
14
14
|
automatic_label_click enable_aria_label save_path
|
15
|
-
asset_host].each do |m|
|
15
|
+
asset_host default_retry_interval].each do |m|
|
16
16
|
expect(session.config.public_send(m)).to eq Capybara.public_send(m)
|
17
17
|
end
|
18
18
|
end
|
data/spec/rack_test_spec.rb
CHANGED
@@ -30,6 +30,8 @@ Capybara::SpecHelper.run_specs TestSessions::RackTest, 'RackTest', capybara_skip
|
|
30
30
|
skip "Nokogiri doesn't support case insensitive CSS attribute matchers"
|
31
31
|
when /#click_button should follow permanent redirects that maintain method/
|
32
32
|
skip "Rack < 2 doesn't support 308" if Gem.loaded_specs['rack'].version < Gem::Version.new('2.0.0')
|
33
|
+
when /#attach_file with multipart form should send prior hidden field if no file submitted/
|
34
|
+
skip 'Rack-test < 2 needs an empty file to detect multipart form' if Gem.loaded_specs['rack-test'].version < Gem::Version.new('2.0.0')
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
@@ -93,6 +95,12 @@ RSpec.describe Capybara::Session do # rubocop:disable RSpec/MultipleDescribes
|
|
93
95
|
session.click_button('Upload Empty')
|
94
96
|
expect(session.html).to include('Successfully ignored empty file field.')
|
95
97
|
end
|
98
|
+
|
99
|
+
it 'should submit multipart even if no file is submitted' do
|
100
|
+
session.visit('/form')
|
101
|
+
session.click_button('Upload Empty')
|
102
|
+
expect(session.html).to include('Content type was multipart/form-data;')
|
103
|
+
end
|
96
104
|
end
|
97
105
|
|
98
106
|
it 'should not submit an obsolete mime type' do
|
@@ -120,7 +120,7 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
|
|
120
120
|
|
121
121
|
describe 'have_xpath matcher' do
|
122
122
|
it 'gives proper description' do
|
123
|
-
expect(have_xpath('//h1').description).to eq(
|
123
|
+
expect(have_xpath('//h1').description).to eq('have visible xpath "//h1"')
|
124
124
|
end
|
125
125
|
|
126
126
|
context 'on a string' do
|
data/spec/rspec_spec.rb
CHANGED
@@ -15,7 +15,7 @@ RSpec.describe 'capybara/rspec' do
|
|
15
15
|
expect(self.class.ancestors).to include Capybara::RSpecMatcherProxies
|
16
16
|
end
|
17
17
|
|
18
|
-
context 'resetting session' do
|
18
|
+
context 'resetting session', order: :defined do
|
19
19
|
it 'sets a cookie in one example...' do
|
20
20
|
visit('/set_cookie')
|
21
21
|
expect(page.body).to include('Cookie set to test_cookie')
|
@@ -27,7 +27,7 @@ RSpec.describe 'capybara/rspec' do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
context 'setting the current driver' do
|
30
|
+
context 'setting the current driver', order: :defined do
|
31
31
|
it 'sets the current driver in one example...' do
|
32
32
|
Capybara.current_driver = :selenium
|
33
33
|
end
|
data/spec/selector_spec.rb
CHANGED
@@ -111,13 +111,13 @@ RSpec.describe Capybara do
|
|
111
111
|
end
|
112
112
|
|
113
113
|
describe 'adding a selector' do
|
114
|
-
it 'can set default
|
114
|
+
it 'can set default visibility' do
|
115
115
|
described_class.add_selector :hidden_field do
|
116
116
|
visible :hidden
|
117
117
|
css { |_sel| 'input[type="hidden"]' }
|
118
118
|
end
|
119
119
|
|
120
|
-
expect(string).to have_no_css('input[type="hidden"]')
|
120
|
+
expect(string).to have_no_css('input[type="hidden"]') # rubocop:disable RSpec/Capybara/SpecificMatcher
|
121
121
|
expect(string).to have_selector(:hidden_field)
|
122
122
|
end
|
123
123
|
end
|
@@ -85,6 +85,8 @@ Capybara::SpecHelper.run_specs TestSessions::Chrome, CHROME_DRIVER.to_s, capybar
|
|
85
85
|
skip 'Need to figure out testing of file downloading on windows platform' if Gem.win_platform?
|
86
86
|
when /Capybara::Session selenium_chrome Capybara::Window#maximize/
|
87
87
|
pending "Chrome headless doesn't support maximize" if ENV['HEADLESS']
|
88
|
+
when /Capybara::Session selenium_chrome node #shadow_root should get visible text/
|
89
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
88
90
|
end
|
89
91
|
end
|
90
92
|
|
@@ -21,8 +21,8 @@ def ensure_selenium_running!
|
|
21
21
|
rescue StandardError
|
22
22
|
if timer.expired?
|
23
23
|
raise 'Selenium is not running. ' \
|
24
|
-
"You can run a selenium server easily with: \n" \
|
25
|
-
'
|
24
|
+
"You can run a selenium server easily with: \n " \
|
25
|
+
'$ docker-compose up -d selenium_chrome'
|
26
26
|
else
|
27
27
|
puts 'Waiting for Selenium docker instance...'
|
28
28
|
sleep 1
|
@@ -62,6 +62,8 @@ Capybara::SpecHelper.run_specs TestSessions::Chrome, CHROME_REMOTE_DRIVER.to_s,
|
|
62
62
|
'Capybara::Session selenium_chrome_remote #attach_file with multipart form should fire change once for each set of files uploaded',
|
63
63
|
'Capybara::Session selenium_chrome_remote #attach_file with multipart form should fire change once when uploading multiple files from empty'
|
64
64
|
pending "Selenium with Remote Chrome doesn't support multiple file upload" unless selenium_gte?(3.14)
|
65
|
+
when /Capybara::Session selenium_chrome node #shadow_root should get visible text/
|
66
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
data/spec/selenium_spec_edge.rb
CHANGED
@@ -36,6 +36,8 @@ Capybara::SpecHelper.run_specs TestSessions::SeleniumEdge, 'selenium', capybara_
|
|
36
36
|
case example.metadata[:full_description]
|
37
37
|
when 'Capybara::Session selenium #attach_file with a block can upload by clicking the file input'
|
38
38
|
pending "EdgeChrome doesn't allow clicking on file inputs"
|
39
|
+
when /Capybara::Session selenium_chrome node #shadow_root should get visible text/
|
40
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
@@ -68,14 +68,20 @@ Capybara::SpecHelper.run_specs TestSessions::SeleniumFirefox, 'selenium', capyba
|
|
68
68
|
when 'Capybara::Session selenium #reset_session! removes ALL cookies'
|
69
69
|
pending "Geckodriver doesn't provide a way to remove cookies outside the current domain"
|
70
70
|
when /drag_to.*HTML5/
|
71
|
-
pending "Firefox < 62 doesn't support a DataTransfer
|
71
|
+
pending "Firefox < 62 doesn't support a DataTransfer constructor" if firefox_lt?(62.0, @session)
|
72
72
|
when 'Capybara::Session selenium #accept_alert should handle the alert if the page changes',
|
73
73
|
'Capybara::Session selenium #accept_alert with an asynchronous alert should accept the alert'
|
74
74
|
skip 'No clue what Firefox is doing here - works fine on MacOS locally'
|
75
|
-
when 'Capybara::Session selenium node #shadow_root should
|
76
|
-
'Capybara::Session selenium node #shadow_root should find
|
77
|
-
'Capybara::Session selenium node #shadow_root should
|
78
|
-
|
75
|
+
when 'Capybara::Session selenium node #shadow_root should find elements inside the shadow dom using CSS',
|
76
|
+
'Capybara::Session selenium node #shadow_root should find nested shadow roots',
|
77
|
+
'Capybara::Session selenium node #shadow_root should click on elements',
|
78
|
+
'Capybara::Session selenium node #shadow_root should use convenience methods once moved to a descendant of the shadow root',
|
79
|
+
'Capybara::Session with firefox with selenium driver #evaluate_script returns a shadow root'
|
80
|
+
pending "Firefox doesn't yet have full W3C shadow root support"
|
81
|
+
when 'Capybara::Session selenium #fill_in should handle carriage returns with line feeds in a textarea correctly'
|
82
|
+
pending 'Not sure what firefox is doing here'
|
83
|
+
when /Capybara::Session selenium_chrome node #shadow_root should get visible text/
|
84
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
79
85
|
end
|
80
86
|
end
|
81
87
|
|
@@ -21,8 +21,8 @@ def ensure_selenium_running!
|
|
21
21
|
rescue StandardError
|
22
22
|
if timer.expired?
|
23
23
|
raise 'Selenium is not running. ' \
|
24
|
-
"You can run a selenium server easily with: \n" \
|
25
|
-
'
|
24
|
+
"You can run a selenium server easily with: \n. " \
|
25
|
+
'$ docker-compose up -d selenium_firefox'
|
26
26
|
else
|
27
27
|
puts 'Waiting for Selenium docker instance...'
|
28
28
|
sleep 1
|
@@ -65,6 +65,8 @@ Capybara::SpecHelper.run_specs TestSessions::RemoteFirefox, FIREFOX_REMOTE_DRIVE
|
|
65
65
|
when /#accept_confirm should work with nested modals$/
|
66
66
|
# skip because this is timing based and hence flaky when set to pending
|
67
67
|
skip 'Broken in FF 63 - https://bugzilla.mozilla.org/show_bug.cgi?id=1487358' if firefox_gte?(63, @session)
|
68
|
+
when /Capybara::Session selenium_chrome node #shadow_root should get visible text/
|
69
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
data/spec/selenium_spec_ie.rb
CHANGED
@@ -103,11 +103,13 @@ Capybara::SpecHelper.run_specs TestSessions::SeleniumIE, 'selenium', capybara_sk
|
|
103
103
|
when /#attach_file with a block/
|
104
104
|
skip 'Hangs IE testing for unknown reason'
|
105
105
|
when /drag_to.*HTML5/
|
106
|
-
pending "IE doesn't support a DataTransfer
|
106
|
+
pending "IE doesn't support a DataTransfer constructor"
|
107
107
|
when /template elements should not be visible/
|
108
108
|
skip "IE doesn't support template elements"
|
109
109
|
when /Element#drop/
|
110
110
|
pending "IE doesn't support DataTransfer constructor"
|
111
|
+
when /Capybara::Session selenium_chrome node #shadow_root should get visible text/
|
112
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
111
113
|
end
|
112
114
|
end
|
113
115
|
|
@@ -88,6 +88,8 @@ Capybara::SpecHelper.run_specs TestSessions::Safari, SAFARI_DRIVER.to_s, capybar
|
|
88
88
|
'Capybara::Session selenium node #shadow_root should find elements inside the shadow dom using CSS',
|
89
89
|
'Capybara::Session selenium node #shadow_root should find nested shadow roots'
|
90
90
|
pending "Safari doesn't yet have W3C shadow root support"
|
91
|
+
when /Capybara::Session selenium_chrome node #shadow_root should get visible text/
|
92
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
91
93
|
end
|
92
94
|
end
|
93
95
|
|
@@ -281,6 +281,7 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
|
|
281
281
|
end
|
282
282
|
|
283
283
|
it 'returns a shadow root' do
|
284
|
+
pending "Geckodriver doesn't fully support shadow root yet" if firefox?(session)
|
284
285
|
session.visit('/with_shadow')
|
285
286
|
shadow = session.find(:css, '#shadow_host')
|
286
287
|
element = session.evaluate_script('arguments[0].shadowRoot', shadow)
|
@@ -346,14 +347,12 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
|
|
346
347
|
pending "Headless Chrome doesn't support directory upload - https://bugs.chromium.org/p/chromedriver/issues/detail?id=2521&q=directory%20upload&colspec=ID%20Status%20Pri%20Owner%20Summary" if chrome?(session) && ENV.fetch('HEADLESS', nil)
|
347
348
|
pending "IE doesn't support uploading a directory" if ie?(session)
|
348
349
|
pending 'Chrome/chromedriver 73 breaks this' if chrome?(session) && chrome_gte?(73, session) && chrome_lt?(75, session)
|
349
|
-
pending "Safari doesn't support uploading a directory" if safari?(session)
|
350
|
-
# pending "Edge/msedgedriver doesn't support directory upload" if edge?(session) && edge_gte?(75, session)
|
351
350
|
|
352
351
|
session.visit('/form')
|
353
352
|
test_file_dir = File.expand_path('./fixtures', File.dirname(__FILE__))
|
354
353
|
session.attach_file('Directory Upload', test_file_dir)
|
355
354
|
session.click_button('Upload Multiple')
|
356
|
-
expect(session
|
355
|
+
expect(session).to have_text('5 | ') # number of files
|
357
356
|
end
|
358
357
|
|
359
358
|
it 'can attach a relative file' do
|
@@ -362,7 +361,7 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
|
|
362
361
|
session.visit('/form')
|
363
362
|
session.attach_file('Single Document', 'spec/fixtures/capybara.csv')
|
364
363
|
session.click_button('Upload Single')
|
365
|
-
expect(session
|
364
|
+
expect(session).to have_text('Content-type: text/csv')
|
366
365
|
end
|
367
366
|
end
|
368
367
|
|
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.
|
4
|
+
version: 3.38.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: 2022-
|
12
|
+
date: 2022-11-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -745,6 +745,7 @@ files:
|
|
745
745
|
- lib/capybara/window.rb
|
746
746
|
- spec/basic_node_spec.rb
|
747
747
|
- spec/capybara_spec.rb
|
748
|
+
- spec/counter_spec.rb
|
748
749
|
- spec/css_builder_spec.rb
|
749
750
|
- spec/css_splitter_spec.rb
|
750
751
|
- spec/dsl_spec.rb
|