capybara 3.3.1 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +16 -0
- data/README.md +5 -7
- data/lib/capybara.rb +7 -6
- data/lib/capybara/config.rb +1 -1
- data/lib/capybara/dsl.rb +2 -2
- data/lib/capybara/helpers.rb +3 -3
- data/lib/capybara/minitest/spec.rb +3 -3
- data/lib/capybara/node/actions.rb +18 -18
- data/lib/capybara/node/base.rb +1 -1
- data/lib/capybara/node/element.rb +2 -2
- data/lib/capybara/node/finders.rb +6 -6
- data/lib/capybara/node/matchers.rb +5 -5
- data/lib/capybara/node/simple.rb +2 -2
- data/lib/capybara/queries/ancestor_query.rb +1 -1
- data/lib/capybara/queries/base_query.rb +12 -11
- data/lib/capybara/queries/current_path_query.rb +1 -1
- data/lib/capybara/queries/selector_query.rb +39 -15
- data/lib/capybara/queries/sibling_query.rb +1 -1
- data/lib/capybara/queries/text_query.rb +1 -1
- data/lib/capybara/rack_test/browser.rb +7 -7
- data/lib/capybara/rack_test/driver.rb +1 -1
- data/lib/capybara/rack_test/form.rb +7 -7
- data/lib/capybara/rack_test/node.rb +16 -16
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/result.rb +8 -4
- data/lib/capybara/rspec/features.rb +4 -4
- data/lib/capybara/rspec/matchers.rb +6 -6
- data/lib/capybara/selector.rb +106 -90
- data/lib/capybara/selector/css.rb +4 -4
- data/lib/capybara/selector/filter_set.rb +52 -8
- data/lib/capybara/selector/selector.rb +39 -15
- data/lib/capybara/selenium/driver.rb +10 -10
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +8 -0
- data/lib/capybara/selenium/node.rb +9 -10
- data/lib/capybara/selenium/nodes/chrome_node.rb +18 -0
- data/lib/capybara/selenium/nodes/marionette_node.rb +32 -7
- data/lib/capybara/server.rb +3 -3
- data/lib/capybara/server/animation_disabler.rb +1 -1
- data/lib/capybara/server/middleware.rb +1 -1
- data/lib/capybara/session.rb +23 -19
- data/lib/capybara/session/config.rb +18 -3
- data/lib/capybara/spec/public/test.js +1 -1
- data/lib/capybara/spec/session/accept_alert_spec.rb +10 -10
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/all_spec.rb +33 -32
- data/lib/capybara/spec/session/ancestor_spec.rb +19 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +38 -38
- data/lib/capybara/spec/session/assert_current_path_spec.rb +16 -16
- data/lib/capybara/spec/session/assert_selector_spec.rb +53 -53
- data/lib/capybara/spec/session/assert_style_spec.rb +3 -3
- data/lib/capybara/spec/session/assert_text_spec.rb +31 -30
- data/lib/capybara/spec/session/assert_title_spec.rb +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +51 -52
- data/lib/capybara/spec/session/body_spec.rb +6 -6
- data/lib/capybara/spec/session/check_spec.rb +52 -47
- data/lib/capybara/spec/session/choose_spec.rb +32 -32
- data/lib/capybara/spec/session/click_button_spec.rb +103 -103
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +24 -23
- data/lib/capybara/spec/session/click_link_spec.rb +49 -48
- data/lib/capybara/spec/session/current_scope_spec.rb +7 -7
- data/lib/capybara/spec/session/current_url_spec.rb +26 -27
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
- data/lib/capybara/spec/session/element/assert_match_selector_spec.rb +8 -8
- data/lib/capybara/spec/session/element/match_css_spec.rb +10 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +6 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +51 -51
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +15 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +7 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +43 -42
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +7 -7
- data/lib/capybara/spec/session/find_field_spec.rb +32 -30
- data/lib/capybara/spec/session/find_link_spec.rb +21 -21
- data/lib/capybara/spec/session/find_spec.rb +153 -135
- data/lib/capybara/spec/session/first_spec.rb +41 -41
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +17 -17
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +31 -17
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +17 -17
- data/lib/capybara/spec/session/has_button_spec.rb +13 -13
- data/lib/capybara/spec/session/has_css_spec.rb +133 -131
- data/lib/capybara/spec/session/has_current_path_spec.rb +29 -29
- data/lib/capybara/spec/session/has_field_spec.rb +58 -58
- data/lib/capybara/spec/session/has_link_spec.rb +4 -4
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +24 -24
- data/lib/capybara/spec/session/has_select_spec.rb +43 -43
- data/lib/capybara/spec/session/has_selector_spec.rb +71 -71
- data/lib/capybara/spec/session/has_style_spec.rb +3 -3
- data/lib/capybara/spec/session/has_table_spec.rb +4 -4
- data/lib/capybara/spec/session/has_text_spec.rb +53 -52
- data/lib/capybara/spec/session/has_title_spec.rb +14 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +39 -38
- data/lib/capybara/spec/session/headers_spec.rb +1 -1
- data/lib/capybara/spec/session/html_spec.rb +6 -6
- data/lib/capybara/spec/session/node_spec.rb +129 -123
- data/lib/capybara/spec/session/node_wrapper_spec.rb +10 -7
- data/lib/capybara/spec/session/refresh_spec.rb +4 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +28 -28
- data/lib/capybara/spec/session/response_code_spec.rb +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_page_spec.rb +37 -37
- data/lib/capybara/spec/session/save_screenshot_spec.rb +6 -6
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/select_spec.rb +81 -81
- data/lib/capybara/spec/session/selectors_spec.rb +17 -17
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +23 -23
- data/lib/capybara/spec/session/title_spec.rb +5 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +24 -20
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +48 -49
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +16 -16
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +2 -2
- data/lib/capybara/spec/session/window/window_spec.rb +4 -4
- data/lib/capybara/spec/session/window/within_window_spec.rb +14 -14
- data/lib/capybara/spec/session/within_spec.rb +41 -41
- data/lib/capybara/spec/spec_helper.rb +11 -9
- data/lib/capybara/spec/test_app.rb +18 -17
- data/lib/capybara/spec/views/form.erb +29 -31
- data/lib/capybara/spec/views/with_html.erb +2 -2
- data/lib/capybara/version.rb +1 -1
- data/spec/basic_node_spec.rb +23 -23
- data/spec/capybara_spec.rb +20 -20
- data/spec/css_splitter_spec.rb +7 -7
- data/spec/dsl_spec.rb +37 -32
- data/spec/filter_set_spec.rb +4 -4
- data/spec/fixtures/selenium_driver_rspec_failure.rb +1 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +1 -1
- data/spec/minitest_spec.rb +4 -4
- data/spec/minitest_spec_spec.rb +23 -23
- data/spec/per_session_config_spec.rb +5 -5
- data/spec/rack_test_spec.rb +44 -44
- data/spec/result_spec.rb +14 -14
- data/spec/rspec/features_spec.rb +13 -13
- data/spec/rspec/scenarios_spec.rb +4 -4
- data/spec/rspec/shared_spec_matchers.rb +282 -281
- data/spec/rspec/views_spec.rb +3 -3
- data/spec/rspec_matchers_spec.rb +10 -10
- data/spec/rspec_spec.rb +29 -29
- data/spec/selector_spec.rb +64 -64
- data/spec/selenium_spec_chrome.rb +14 -22
- data/spec/selenium_spec_chrome_remote.rb +28 -8
- data/spec/selenium_spec_edge.rb +9 -4
- data/spec/selenium_spec_firefox_remote.rb +87 -0
- data/spec/selenium_spec_ie.rb +9 -4
- data/spec/selenium_spec_marionette.rb +42 -18
- data/spec/server_spec.rb +29 -27
- data/spec/session_spec.rb +17 -17
- data/spec/shared_selenium_session.rb +70 -52
- data/spec/spec_helper.rb +1 -1
- metadata +4 -2
@@ -57,7 +57,7 @@ class TestApp < Sinatra::Base
|
|
57
57
|
end
|
58
58
|
|
59
59
|
get '/get_referer' do
|
60
|
-
request.referer.nil? ?
|
60
|
+
request.referer.nil? ? 'No referer' : "Got referer: #{request.referer}"
|
61
61
|
end
|
62
62
|
|
63
63
|
get '/host' do
|
@@ -67,14 +67,14 @@ class TestApp < Sinatra::Base
|
|
67
67
|
get '/redirect/:times/times' do
|
68
68
|
times = params[:times].to_i
|
69
69
|
if times.zero?
|
70
|
-
|
70
|
+
'redirection complete'
|
71
71
|
else
|
72
72
|
redirect "/redirect/#{times - 1}/times"
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
76
|
get '/landed' do
|
77
|
-
|
77
|
+
'You landed'
|
78
78
|
end
|
79
79
|
|
80
80
|
post '/landed' do
|
@@ -101,12 +101,12 @@ class TestApp < Sinatra::Base
|
|
101
101
|
redirect '/redirect_again'
|
102
102
|
end
|
103
103
|
|
104
|
-
delete
|
105
|
-
|
104
|
+
delete '/delete' do
|
105
|
+
'The requested object was deleted'
|
106
106
|
end
|
107
107
|
|
108
|
-
get
|
109
|
-
|
108
|
+
get '/delete' do
|
109
|
+
'Not deleted'
|
110
110
|
end
|
111
111
|
|
112
112
|
get '/redirect_back' do
|
@@ -141,11 +141,11 @@ class TestApp < Sinatra::Base
|
|
141
141
|
end
|
142
142
|
|
143
143
|
get '/error' do
|
144
|
-
raise TestAppError,
|
144
|
+
raise TestAppError, 'some error'
|
145
145
|
end
|
146
146
|
|
147
147
|
get '/other_error' do
|
148
|
-
raise TestAppOtherError.new(
|
148
|
+
raise TestAppOtherError.new('something', 'other error')
|
149
149
|
end
|
150
150
|
|
151
151
|
get '/load_error' do
|
@@ -166,7 +166,7 @@ class TestApp < Sinatra::Base
|
|
166
166
|
end
|
167
167
|
|
168
168
|
get '/download.csv' do
|
169
|
-
content_type
|
169
|
+
content_type 'text/csv'
|
170
170
|
'This, is, comma, separated' \
|
171
171
|
'Thomas, Walpole, was , here'
|
172
172
|
end
|
@@ -177,7 +177,7 @@ class TestApp < Sinatra::Base
|
|
177
177
|
|
178
178
|
post '/form' do
|
179
179
|
@@form_post_count += 1
|
180
|
-
'<pre id="results">' + params[:form].merge(
|
180
|
+
'<pre id="results">' + params[:form].merge('post_count' => @@form_post_count).to_yaml + '</pre>'
|
181
181
|
end
|
182
182
|
|
183
183
|
post '/upload_empty' do
|
@@ -191,23 +191,24 @@ class TestApp < Sinatra::Base
|
|
191
191
|
post '/upload' do
|
192
192
|
begin
|
193
193
|
buffer = []
|
194
|
-
buffer << "Content-type: #{params
|
195
|
-
buffer << "File content: #{params
|
194
|
+
buffer << "Content-type: #{params.dig(:form, :document, :type)}"
|
195
|
+
buffer << "File content: #{params.dig(:form, :document, :tempfile).read}"
|
196
196
|
buffer.join(' | ')
|
197
|
-
rescue
|
197
|
+
rescue StandardError
|
198
198
|
'No file uploaded'
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
202
|
post '/upload_multiple' do
|
203
203
|
begin
|
204
|
-
|
205
|
-
|
204
|
+
docs = params.dig(:form, :multiple_documents)
|
205
|
+
buffer = [docs.size.to_s]
|
206
|
+
docs.each do |doc|
|
206
207
|
buffer << "Content-type: #{doc[:type]}"
|
207
208
|
buffer << "File content: #{doc[:tempfile].read}"
|
208
209
|
end
|
209
210
|
buffer.join(' | ')
|
210
|
-
rescue
|
211
|
+
rescue StandardError
|
211
212
|
'No files uploaded'
|
212
213
|
end
|
213
214
|
end
|
@@ -195,6 +195,8 @@ New line after and before textarea tag
|
|
195
195
|
Koenigsegg
|
196
196
|
<input type="checkbox" value="koenigsegg" name="form[cars][]" id="form_cars_koenigsegg" checked="checked" style="display: none"/>
|
197
197
|
</label>
|
198
|
+
<input type="checkbox" value="maserati" name="form[cars][]" id="form_cars_maserati" disabled="disabled"/>
|
199
|
+
<label for="form_cars_maserati">Maserati</label>
|
198
200
|
</p>
|
199
201
|
|
200
202
|
<p>
|
@@ -370,7 +372,6 @@ New line after and before textarea tag
|
|
370
372
|
</label>
|
371
373
|
</p>
|
372
374
|
|
373
|
-
|
374
375
|
<p>
|
375
376
|
<label for="form_disabled_file">
|
376
377
|
Disabled File
|
@@ -378,41 +379,38 @@ New line after and before textarea tag
|
|
378
379
|
</label>
|
379
380
|
</p>
|
380
381
|
|
381
|
-
<
|
382
|
-
<
|
383
|
-
|
384
|
-
</fieldset>
|
385
|
-
</p>
|
382
|
+
<fieldset>
|
383
|
+
<input name="form[enabled_fieldset_child]" id="form_enabled_fieldset_child"/>
|
384
|
+
</fieldset>
|
386
385
|
|
387
|
-
|
388
|
-
|
389
|
-
<
|
390
|
-
|
391
|
-
<
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
<
|
399
|
-
|
400
|
-
|
401
|
-
|
386
|
+
<fieldset disabled="disabled" id="form_disabled_fieldset">
|
387
|
+
<legend>Disabled Child</legend>
|
388
|
+
<input name="form[disabled_fieldset_child]" id="form_disabled_fieldset_child"/>
|
389
|
+
<select>
|
390
|
+
<option>Disabled Child Option</option>
|
391
|
+
</select>
|
392
|
+
</fieldset>
|
393
|
+
|
394
|
+
<fieldset disabled="disabled">
|
395
|
+
<legend>
|
396
|
+
Nested Disabled
|
397
|
+
<input type="checkbox" name="form[disabled_fieldeset_legend_child]" id="form_disabled_fieldset_legend_child"/>
|
398
|
+
</legend>
|
399
|
+
<legend>
|
400
|
+
Another WLegend
|
401
|
+
<input type="checkbox" name="form[disabled_fieldeset_second_legend_child]" id="form_disabled_fieldset_second_legend_child"/>
|
402
|
+
</legend>
|
403
|
+
<fieldset>
|
402
404
|
<legend>
|
403
|
-
|
404
|
-
<input
|
405
|
+
Disabled?
|
406
|
+
<input id="form_disabled_fieldset_descendant_legend_child">
|
405
407
|
</legend>
|
406
|
-
<
|
407
|
-
<fieldset>
|
408
|
-
<input name="form[disabled_fieldset_descendant]" id="form_disabled_fieldset_descendant"/>
|
409
|
-
</fieldset>
|
410
|
-
</p>
|
408
|
+
<input name="form[disabled_fieldset_descendant]" id="form_disabled_fieldset_descendant"/>
|
411
409
|
</fieldset>
|
412
|
-
</
|
410
|
+
</fieldset>
|
413
411
|
|
414
412
|
<p>
|
415
|
-
<select>
|
413
|
+
<select data-test-id="my_test_id">
|
416
414
|
<optgroup label="Level One">
|
417
415
|
<option> A.1 </option>
|
418
416
|
</optgroup>
|
@@ -461,7 +459,7 @@ New line after and before textarea tag
|
|
461
459
|
</form>
|
462
460
|
|
463
461
|
<form id="form2" action="/form" method="post">
|
464
|
-
<input type="text" name="form[which_form]" value="form2" id="
|
462
|
+
<input type="text" name="form[which_form]" value="form2" id="form_which_form2"/>
|
465
463
|
<input type="submit" name="form[unused]" value="unused"/>
|
466
464
|
<button type="submit" name="form[other_form_button]" value="other_form_button" form="form1">Form1</button>
|
467
465
|
</form>
|
@@ -36,9 +36,9 @@
|
|
36
36
|
</p>
|
37
37
|
|
38
38
|
<p>
|
39
|
-
<input type="text" id="test_field" value="monkey"/>
|
39
|
+
<input type="text" id="test_field" data-test-id="test_id" value="monkey"/>
|
40
40
|
<input type="text" readonly="readonly" value="should not change" />
|
41
|
-
<textarea id="normal">
|
41
|
+
<textarea id="normal" data-other-test-id="test_id">
|
42
42
|
banana</textarea>
|
43
43
|
<textarea id="additional_newline">
|
44
44
|
|
data/lib/capybara/version.rb
CHANGED
data/spec/basic_node_spec.rb
CHANGED
@@ -46,19 +46,19 @@ RSpec.describe Capybara do
|
|
46
46
|
STRING
|
47
47
|
end
|
48
48
|
|
49
|
-
it
|
49
|
+
it 'allows using matchers' do
|
50
50
|
expect(string).to have_css('#page')
|
51
51
|
expect(string).not_to have_css('#does-not-exist')
|
52
52
|
end
|
53
53
|
|
54
|
-
it
|
54
|
+
it 'allows using custom matchers' do
|
55
55
|
Capybara.add_selector :lifeform do
|
56
56
|
xpath { |name| ".//option[contains(.,'#{name}')]" }
|
57
57
|
end
|
58
|
-
expect(string).to have_selector(:id,
|
58
|
+
expect(string).to have_selector(:id, 'page')
|
59
59
|
expect(string).not_to have_selector(:id, 'does-not-exist')
|
60
|
-
expect(string).to have_selector(:lifeform,
|
61
|
-
expect(string).not_to have_selector(:lifeform,
|
60
|
+
expect(string).to have_selector(:lifeform, 'Monkey')
|
61
|
+
expect(string).not_to have_selector(:lifeform, 'Gorilla')
|
62
62
|
end
|
63
63
|
|
64
64
|
it 'allows custom matcher using css' do
|
@@ -69,72 +69,72 @@ RSpec.describe Capybara do
|
|
69
69
|
expect(string).not_to have_selector(:section, 'section_8')
|
70
70
|
end
|
71
71
|
|
72
|
-
it
|
72
|
+
it 'allows using matchers with text option' do
|
73
73
|
expect(string).to have_css('h1', text: 'Totally awesome')
|
74
74
|
expect(string).not_to have_css('h1', text: 'Not so awesome')
|
75
75
|
end
|
76
76
|
|
77
|
-
it
|
77
|
+
it 'allows finding only visible nodes' do
|
78
78
|
expect(string.all(:css, '#secret', visible: true)).to be_empty
|
79
79
|
expect(string.all(:css, '#secret', visible: false).size).to eq(1)
|
80
80
|
end
|
81
81
|
|
82
|
-
it
|
82
|
+
it 'allows finding elements and extracting text from them' do
|
83
83
|
expect(string.find('//h1').text).to eq('Totally awesome')
|
84
84
|
end
|
85
85
|
|
86
|
-
it
|
86
|
+
it 'allows finding elements and extracting attributes from them' do
|
87
87
|
expect(string.find('//h1')[:data]).to eq('fantastic')
|
88
88
|
end
|
89
89
|
|
90
|
-
it
|
90
|
+
it 'allows finding elements and extracting the tag name from them' do
|
91
91
|
expect(string.find('//h1').tag_name).to eq('h1')
|
92
92
|
end
|
93
93
|
|
94
|
-
it
|
94
|
+
it 'allows finding elements and extracting the path' do
|
95
95
|
expect(string.find('//h1').path).to eq('/html/body/div/div[1]/h1')
|
96
96
|
end
|
97
97
|
|
98
|
-
it
|
98
|
+
it 'allows finding elements and extracting the value' do
|
99
99
|
expect(string.find('//div/input').value).to eq('bar')
|
100
100
|
expect(string.find('//select').value).to eq('Capybara')
|
101
101
|
end
|
102
102
|
|
103
|
-
it
|
103
|
+
it 'allows finding elements and checking if they are visible' do
|
104
104
|
expect(string.find('//h1')).to be_visible
|
105
|
-
expect(string.find(:css,
|
105
|
+
expect(string.find(:css, '#secret', visible: false)).not_to be_visible
|
106
106
|
end
|
107
107
|
|
108
|
-
it
|
108
|
+
it 'allows finding elements and checking if they are disabled' do
|
109
109
|
expect(string.find('//form/input[@name="bleh"]')).to be_disabled
|
110
110
|
expect(string.find('//form/input[@name="meh"]')).not_to be_disabled
|
111
111
|
end
|
112
112
|
|
113
|
-
describe
|
114
|
-
it
|
115
|
-
expect(string.title).to eq(
|
113
|
+
describe '#title' do
|
114
|
+
it 'returns the page title' do
|
115
|
+
expect(string.title).to eq('simple_node')
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
|
-
describe
|
120
|
-
it
|
119
|
+
describe '#has_title?' do
|
120
|
+
it 'returns whether the page has the given title' do
|
121
121
|
expect(string.has_title?('simple_node')).to be_truthy
|
122
122
|
expect(string.has_title?('monkey')).to be_falsey
|
123
123
|
end
|
124
124
|
|
125
|
-
it
|
125
|
+
it 'allows regexp matches' do
|
126
126
|
expect(string.has_title?(/s[a-z]+_node/)).to be_truthy
|
127
127
|
expect(string.has_title?(/monkey/)).to be_falsey
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
131
|
describe '#has_no_title?' do
|
132
|
-
it
|
132
|
+
it 'returns whether the page does not have the given title' do
|
133
133
|
expect(string.has_no_title?('simple_node')).to be_falsey
|
134
134
|
expect(string.has_no_title?('monkey')).to be_truthy
|
135
135
|
end
|
136
136
|
|
137
|
-
it
|
137
|
+
it 'allows regexp matches' do
|
138
138
|
expect(string.has_no_title?(/s[a-z]+_node/)).to be_falsey
|
139
139
|
expect(string.has_no_title?(/monkey/)).to be_truthy
|
140
140
|
end
|
data/spec/capybara_spec.rb
CHANGED
@@ -8,7 +8,7 @@ RSpec.describe Capybara do
|
|
8
8
|
Capybara.default_max_wait_time = @previous_default_time
|
9
9
|
end
|
10
10
|
|
11
|
-
it
|
11
|
+
it 'should be changeable' do
|
12
12
|
@previous_default_time = Capybara.default_max_wait_time
|
13
13
|
Capybara.default_max_wait_time = 5
|
14
14
|
expect(Capybara.default_max_wait_time).to eq(5)
|
@@ -16,18 +16,18 @@ RSpec.describe Capybara do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
describe '.register_driver' do
|
19
|
-
it
|
19
|
+
it 'should add a new driver' do
|
20
20
|
Capybara.register_driver :schmoo do |app|
|
21
21
|
Capybara::RackTest::Driver.new(app)
|
22
22
|
end
|
23
23
|
session = Capybara::Session.new(:schmoo, TestApp)
|
24
24
|
session.visit('/')
|
25
|
-
expect(session.body).to include(
|
25
|
+
expect(session.body).to include('Hello world!')
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '.register_server' do
|
30
|
-
it
|
30
|
+
it 'should add a new server' do
|
31
31
|
Capybara.register_server :blob do |_app, _port, _host|
|
32
32
|
# do nothing
|
33
33
|
end
|
@@ -36,40 +36,40 @@ RSpec.describe Capybara do
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
describe
|
39
|
+
describe '.server' do
|
40
40
|
after do
|
41
41
|
Capybara.server = :default
|
42
42
|
end
|
43
43
|
|
44
|
-
it
|
44
|
+
it 'should default to a proc that calls run_default_server' do
|
45
45
|
mock_app = Object.new
|
46
46
|
allow(Capybara).to receive(:run_default_server).and_return(true)
|
47
47
|
Capybara.server.call(mock_app, 8000)
|
48
48
|
expect(Capybara).to have_received(:run_default_server).with(mock_app, 8000)
|
49
49
|
end
|
50
50
|
|
51
|
-
it
|
51
|
+
it 'should return a custom server proc' do
|
52
52
|
server = ->(_app, _port) {}
|
53
53
|
Capybara.register_server :custom, &server
|
54
54
|
Capybara.server = :custom
|
55
55
|
expect(Capybara.server).to eq(server)
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
58
|
+
it 'should have :webrick registered' do
|
59
59
|
expect(Capybara.servers[:webrick]).not_to be_nil
|
60
60
|
end
|
61
61
|
|
62
|
-
it
|
62
|
+
it 'should have :puma registered' do
|
63
63
|
expect(Capybara.servers[:puma]).not_to be_nil
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
describe
|
67
|
+
describe 'server=' do
|
68
68
|
after do
|
69
69
|
Capybara.server = :default
|
70
70
|
end
|
71
71
|
|
72
|
-
it
|
72
|
+
it 'accepts a proc' do
|
73
73
|
server = ->(_app, _port) {}
|
74
74
|
Capybara.server = server
|
75
75
|
expect(Capybara.server).to eq server
|
@@ -81,15 +81,15 @@ RSpec.describe Capybara do
|
|
81
81
|
Capybara.app_host = nil
|
82
82
|
end
|
83
83
|
|
84
|
-
it
|
85
|
-
expect { Capybara.app_host =
|
84
|
+
it 'should warn if not a valid URL' do
|
85
|
+
expect { Capybara.app_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.app_host should be set to a url/)
|
86
86
|
end
|
87
87
|
|
88
|
-
it
|
89
|
-
expect { Capybara.app_host =
|
88
|
+
it 'should not warn if a valid URL' do
|
89
|
+
expect { Capybara.app_host = 'http://www.example.com' }.not_to raise_error
|
90
90
|
end
|
91
91
|
|
92
|
-
it
|
92
|
+
it 'should not warn if nil' do
|
93
93
|
expect { Capybara.app_host = nil }.not_to raise_error
|
94
94
|
end
|
95
95
|
end
|
@@ -101,12 +101,12 @@ RSpec.describe Capybara do
|
|
101
101
|
Capybara.default_host = old_default
|
102
102
|
end
|
103
103
|
|
104
|
-
it
|
105
|
-
expect { Capybara.default_host =
|
104
|
+
it 'should raise if not a valid URL' do
|
105
|
+
expect { Capybara.default_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.default_host should be set to a url/)
|
106
106
|
end
|
107
107
|
|
108
|
-
it
|
109
|
-
expect { Capybara.default_host =
|
108
|
+
it 'should not warn if a valid URL' do
|
109
|
+
expect { Capybara.default_host = 'http://www.example.com' }.not_to raise_error
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
data/spec/css_splitter_spec.rb
CHANGED
@@ -7,30 +7,30 @@ RSpec.describe Capybara::Selector::CSS::Splitter do
|
|
7
7
|
::Capybara::Selector::CSS::Splitter.new
|
8
8
|
end
|
9
9
|
|
10
|
-
context
|
11
|
-
it
|
10
|
+
context 'split not needed' do
|
11
|
+
it 'normal CSS selector' do
|
12
12
|
css = 'div[id="abc"]'
|
13
13
|
expect(splitter.split(css)).to eq [css]
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it 'comma in strings' do
|
17
17
|
css = 'div[id="a,bc"]'
|
18
18
|
expect(splitter.split(css)).to eq [css]
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
21
|
+
it 'comma in pseudo-selector' do
|
22
22
|
css = 'div.class1:not(.class1, .class2)'
|
23
23
|
expect(splitter.split(css)).to eq [css]
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
context
|
28
|
-
it
|
27
|
+
context 'split needed' do
|
28
|
+
it 'root level comma' do
|
29
29
|
css = 'div.class1, span, p.class2'
|
30
30
|
expect(splitter.split(css)).to eq ['div.class1', 'span', 'p.class2']
|
31
31
|
end
|
32
32
|
|
33
|
-
it
|
33
|
+
it 'root level comma when quotes and pseudo selectors' do
|
34
34
|
css = 'div.class1[id="abc\\"def,ghi"]:not(.class3, .class4), span[id=\'a"c\\\'de\'], section, #abc\\,def'
|
35
35
|
expect(splitter.split(css)).to eq ['div.class1[id="abc\\"def,ghi"]:not(.class3, .class4)', 'span[id=\'a"c\\\'de\']', 'section', '#abc\\,def']
|
36
36
|
end
|