capybara 2.4.4 → 2.5.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 +32 -5
- data/README.md +69 -8
- data/lib/capybara.rb +50 -29
- data/lib/capybara/driver/base.rb +4 -0
- data/lib/capybara/driver/node.rb +4 -0
- data/lib/capybara/helpers.rb +17 -5
- data/lib/capybara/node/actions.rb +16 -11
- data/lib/capybara/node/base.rb +7 -7
- data/lib/capybara/node/document_matchers.rb +1 -1
- data/lib/capybara/node/element.rb +82 -7
- data/lib/capybara/node/finders.rb +62 -22
- data/lib/capybara/node/matchers.rb +3 -3
- data/lib/capybara/node/simple.rb +6 -1
- data/lib/capybara/queries/base_query.rb +1 -1
- data/lib/capybara/queries/current_path_query.rb +58 -0
- data/lib/capybara/queries/text_query.rb +2 -11
- data/lib/capybara/rack_test/browser.rb +7 -2
- data/lib/capybara/rack_test/driver.rb +4 -0
- data/lib/capybara/rack_test/form.rb +2 -1
- data/lib/capybara/rack_test/node.rb +1 -0
- data/lib/capybara/result.rb +2 -2
- data/lib/capybara/rspec.rb +1 -0
- data/lib/capybara/rspec/features.rb +1 -1
- data/lib/capybara/rspec/matchers.rb +42 -3
- data/lib/capybara/selector.rb +7 -2
- data/lib/capybara/selenium/driver.rb +26 -12
- data/lib/capybara/selenium/node.rb +42 -6
- data/lib/capybara/server.rb +1 -1
- data/lib/capybara/session.rb +78 -50
- data/lib/capybara/session/matchers.rb +69 -0
- data/lib/capybara/spec/public/test.js +8 -0
- data/lib/capybara/spec/session/all_spec.rb +5 -0
- data/lib/capybara/spec/session/assert_current_path.rb +59 -0
- data/lib/capybara/spec/session/assert_text.rb +1 -1
- data/lib/capybara/spec/session/attach_file_spec.rb +2 -2
- data/lib/capybara/spec/session/body_spec.rb +2 -0
- data/lib/capybara/spec/session/click_button_spec.rb +17 -8
- data/lib/capybara/spec/session/click_link_spec.rb +32 -1
- data/lib/capybara/spec/session/current_url_spec.rb +5 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +1 -1
- data/lib/capybara/spec/session/find_field_spec.rb +17 -0
- data/lib/capybara/spec/session/find_spec.rb +14 -5
- data/lib/capybara/spec/session/first_spec.rb +24 -0
- data/lib/capybara/spec/session/has_current_path_spec.rb +68 -0
- data/lib/capybara/spec/session/has_link_spec.rb +3 -0
- data/lib/capybara/spec/session/has_text_spec.rb +7 -0
- data/lib/capybara/spec/session/node_spec.rb +45 -6
- data/lib/capybara/spec/session/reset_session_spec.rb +18 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +19 -0
- data/lib/capybara/spec/session/save_page_spec.rb +12 -3
- data/lib/capybara/spec/session/save_screenshot_spec.rb +23 -0
- data/lib/capybara/spec/session/select_spec.rb +12 -0
- data/lib/capybara/spec/session/title_spec.rb +2 -2
- data/lib/capybara/spec/session/window/become_closed_spec.rb +4 -4
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +8 -0
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +14 -8
- data/lib/capybara/spec/session/window/window_spec.rb +24 -4
- data/lib/capybara/spec/spec_helper.rb +3 -1
- data/lib/capybara/spec/test_app.rb +10 -1
- data/lib/capybara/spec/views/form.erb +7 -1
- data/lib/capybara/spec/views/path.erb +12 -0
- data/lib/capybara/spec/views/with_html.erb +2 -0
- data/lib/capybara/spec/views/with_js.erb +9 -1
- data/lib/capybara/spec/views/with_title.erb +4 -1
- data/lib/capybara/spec/views/with_windows.erb +2 -2
- data/lib/capybara/version.rb +1 -1
- data/spec/basic_node_spec.rb +1 -0
- data/spec/capybara_spec.rb +12 -3
- data/spec/dsl_spec.rb +18 -6
- data/spec/rack_test_spec.rb +6 -5
- data/spec/rspec/matchers_spec.rb +62 -16
- data/spec/rspec/views_spec.rb +7 -0
- data/spec/selenium_spec.rb +38 -3
- data/spec/selenium_spec_chrome.rb +3 -7
- metadata +13 -4
data/lib/capybara/session.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'capybara/session/matchers'
|
2
|
+
|
1
3
|
module Capybara
|
2
4
|
|
3
5
|
##
|
@@ -24,10 +26,12 @@ module Capybara
|
|
24
26
|
# When using capybara/dsl, the Session is initialized automatically for you.
|
25
27
|
#
|
26
28
|
class Session
|
29
|
+
include Capybara::SessionMatchers
|
30
|
+
|
27
31
|
NODE_METHODS = [
|
28
32
|
:all, :first, :attach_file, :text, :check, :choose,
|
29
33
|
:click_link_or_button, :click_button, :click_link, :field_labeled,
|
30
|
-
:fill_in, :find, :find_button, :find_by_id, :find_field, :find_link,
|
34
|
+
:fill_in, :find, :find_all, :find_button, :find_by_id, :find_field, :find_link,
|
31
35
|
:has_content?, :has_text?, :has_css?, :has_no_content?, :has_no_text?,
|
32
36
|
:has_no_css?, :has_no_xpath?, :resolve, :has_xpath?, :select, :uncheck,
|
33
37
|
:has_link?, :has_no_link?, :has_button?, :has_no_button?, :has_field?,
|
@@ -48,7 +52,8 @@ module Capybara
|
|
48
52
|
:windows, :open_new_window, :switch_to_window, :within_window, :window_opened_by,
|
49
53
|
:save_page, :save_and_open_page, :save_screenshot,
|
50
54
|
:save_and_open_screenshot, :reset_session!, :response_headers,
|
51
|
-
:status_code, :current_scope
|
55
|
+
:status_code, :current_scope,
|
56
|
+
:assert_current_path, :assert_no_current_path, :has_current_path?, :has_no_current_path?
|
52
57
|
] + DOCUMENT_METHODS
|
53
58
|
MODAL_METHODS = [
|
54
59
|
:accept_alert, :accept_confirm, :dismiss_confirm, :accept_prompt,
|
@@ -101,7 +106,7 @@ module Capybara
|
|
101
106
|
def reset!
|
102
107
|
if @touched
|
103
108
|
driver.reset!
|
104
|
-
assert_no_selector :xpath, "/html/body/*"
|
109
|
+
assert_no_selector :xpath, "/html/body/*" if driver.browser_initialized?
|
105
110
|
@touched = false
|
106
111
|
end
|
107
112
|
raise_server_error!
|
@@ -380,7 +385,11 @@ module Capybara
|
|
380
385
|
# `within_frame` or `within_window` methods
|
381
386
|
# @raise [ArgumentError] if both or neither arguments were provided
|
382
387
|
#
|
383
|
-
def switch_to_window(window = nil)
|
388
|
+
def switch_to_window(window = nil, options= {})
|
389
|
+
if window.is_a? Hash
|
390
|
+
options = window
|
391
|
+
window = nil
|
392
|
+
end
|
384
393
|
block_given = block_given?
|
385
394
|
if window && block_given
|
386
395
|
raise ArgumentError, "`switch_to_window` can take either a block or a window, not both"
|
@@ -395,20 +404,23 @@ module Capybara
|
|
395
404
|
driver.switch_to_window(window.handle)
|
396
405
|
window
|
397
406
|
else
|
398
|
-
|
399
|
-
|
400
|
-
driver.
|
401
|
-
|
402
|
-
|
403
|
-
|
407
|
+
wait_time = Capybara::Query.new(options).wait
|
408
|
+
document.synchronize(wait_time, errors: [Capybara::WindowError]) do
|
409
|
+
original_window_handle = driver.current_window_handle
|
410
|
+
begin
|
411
|
+
driver.window_handles.each do |handle|
|
412
|
+
driver.switch_to_window handle
|
413
|
+
if yield
|
414
|
+
return Window.new(self, handle)
|
415
|
+
end
|
404
416
|
end
|
417
|
+
rescue => e
|
418
|
+
driver.switch_to_window(original_window_handle)
|
419
|
+
raise e
|
420
|
+
else
|
421
|
+
driver.switch_to_window(original_window_handle)
|
422
|
+
raise Capybara::WindowError, "Could not find a window matching block/lambda"
|
405
423
|
end
|
406
|
-
rescue => e
|
407
|
-
driver.switch_to_window(original_window_handle)
|
408
|
-
raise e
|
409
|
-
else
|
410
|
-
driver.switch_to_window(original_window_handle)
|
411
|
-
raise Capybara::WindowError, "Could not find a window matching block/lambda"
|
412
424
|
end
|
413
425
|
end
|
414
426
|
end
|
@@ -480,7 +492,7 @@ module Capybara
|
|
480
492
|
# {https://dvcs.w3.org/hg/webdriver/raw-file/default/webdriver-spec.html#h_note_10 as order of windows isn't defined in some drivers}
|
481
493
|
#
|
482
494
|
# @param options [Hash]
|
483
|
-
# @option options [Numeric] :wait (Capybara.
|
495
|
+
# @option options [Numeric] :wait (Capybara.default_max_wait_time) maximum wait time
|
484
496
|
# @return [Capybara::Window] the window that has been opened within a block
|
485
497
|
# @raise [Capybara::WindowError] if block passed to window hasn't opened window
|
486
498
|
# or opened more than one window
|
@@ -561,7 +573,7 @@ module Capybara
|
|
561
573
|
else
|
562
574
|
options[:text]=text_or_options
|
563
575
|
end
|
564
|
-
|
576
|
+
|
565
577
|
driver.accept_modal(:confirm, options, &blk)
|
566
578
|
end
|
567
579
|
|
@@ -577,7 +589,7 @@ module Capybara
|
|
577
589
|
else
|
578
590
|
options[:text]=text_or_options
|
579
591
|
end
|
580
|
-
|
592
|
+
|
581
593
|
driver.dismiss_modal(:confirm, options, &blk)
|
582
594
|
end
|
583
595
|
|
@@ -594,7 +606,7 @@ module Capybara
|
|
594
606
|
else
|
595
607
|
options[:text]=text_or_options
|
596
608
|
end
|
597
|
-
|
609
|
+
|
598
610
|
driver.accept_modal(:prompt, options, &blk)
|
599
611
|
end
|
600
612
|
|
@@ -610,60 +622,70 @@ module Capybara
|
|
610
622
|
else
|
611
623
|
options[:text]=text_or_options
|
612
624
|
end
|
613
|
-
|
625
|
+
|
614
626
|
driver.dismiss_modal(:prompt, options, &blk)
|
615
627
|
end
|
616
628
|
|
617
629
|
##
|
618
630
|
#
|
619
|
-
# Save a snapshot of the page.
|
631
|
+
# Save a snapshot of the page. If `Capybara.asset_host` is set it will inject `base` tag
|
632
|
+
# pointing to `asset_host`.
|
620
633
|
#
|
621
|
-
#
|
634
|
+
# If invoked without arguments it will save file to `Capybara.save_and_open_page_path`
|
635
|
+
# and file will be given randomly generated filename.
|
622
636
|
#
|
623
|
-
|
624
|
-
path
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
File.
|
637
|
+
# @param [String] path the path to where it should be saved
|
638
|
+
# @return [String] the path to which the file was saved
|
639
|
+
#
|
640
|
+
def save_page(path = nil)
|
641
|
+
path = prepare_path(path, 'html')
|
642
|
+
File.write(path, Capybara::Helpers.inject_asset_host(body), mode: 'wb')
|
629
643
|
path
|
630
644
|
end
|
631
645
|
|
632
646
|
##
|
633
647
|
#
|
634
|
-
# Save a snapshot of the page and open it in a browser for inspection
|
648
|
+
# Save a snapshot of the page and open it in a browser for inspection.
|
649
|
+
#
|
650
|
+
# If invoked without arguments it will save file to `Capybara.save_and_open_page_path`
|
651
|
+
# and file will be given randomly generated filename.
|
635
652
|
#
|
636
|
-
# @param
|
653
|
+
# @param [String] path the path to where it should be saved
|
637
654
|
#
|
638
|
-
def save_and_open_page(
|
639
|
-
|
640
|
-
open_file(
|
655
|
+
def save_and_open_page(path = nil)
|
656
|
+
path = save_page(path)
|
657
|
+
open_file(path)
|
641
658
|
end
|
642
659
|
|
643
660
|
##
|
644
661
|
#
|
645
|
-
# Save a screenshot of page
|
662
|
+
# Save a screenshot of page.
|
646
663
|
#
|
647
|
-
#
|
648
|
-
#
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
664
|
+
# If invoked without `path` argument it will save file to `Capybara.save_and_open_page_path`
|
665
|
+
# and file will be given randomly generated filename.
|
666
|
+
#
|
667
|
+
# @param [String] path the path to where it should be saved
|
668
|
+
# @param [Hash] options a customizable set of options
|
669
|
+
# @return [String] the path to which the file was saved
|
670
|
+
def save_screenshot(path = nil, options = {})
|
671
|
+
path = prepare_path(path, 'png')
|
654
672
|
driver.save_screenshot(path, options)
|
655
673
|
path
|
656
674
|
end
|
657
675
|
|
658
676
|
##
|
659
677
|
#
|
660
|
-
# Save a screenshot of the page and open it for inspection
|
678
|
+
# Save a screenshot of the page and open it for inspection.
|
661
679
|
#
|
662
|
-
#
|
680
|
+
# If invoked without `path` argument it will save file to `Capybara.save_and_open_page_path`
|
681
|
+
# and file will be given randomly generated filename.
|
663
682
|
#
|
664
|
-
|
665
|
-
|
666
|
-
|
683
|
+
# @param [String] path the path to where it should be saved
|
684
|
+
# @param [Hash] options a customizable set of options
|
685
|
+
#
|
686
|
+
def save_and_open_screenshot(path = nil, options = {})
|
687
|
+
path = save_screenshot(path, options)
|
688
|
+
open_file(path)
|
667
689
|
end
|
668
690
|
|
669
691
|
def document
|
@@ -693,16 +715,22 @@ module Capybara
|
|
693
715
|
|
694
716
|
private
|
695
717
|
|
696
|
-
def open_file(
|
718
|
+
def open_file(path)
|
697
719
|
begin
|
698
720
|
require "launchy"
|
699
|
-
Launchy.open(
|
721
|
+
Launchy.open(path)
|
700
722
|
rescue LoadError
|
701
|
-
warn "File saved to #{
|
723
|
+
warn "File saved to #{path}."
|
702
724
|
warn "Please install the launchy gem to open the file automatically."
|
703
725
|
end
|
704
726
|
end
|
705
727
|
|
728
|
+
def prepare_path(path, extension)
|
729
|
+
path = default_path(extension) if path.nil?
|
730
|
+
FileUtils.mkdir_p(File.dirname(path))
|
731
|
+
path
|
732
|
+
end
|
733
|
+
|
706
734
|
def default_path(extension)
|
707
735
|
timestamp = Time.new.strftime("%Y%m%d%H%M%S")
|
708
736
|
path = "capybara-#{timestamp}#{rand(10**10)}.#{extension}"
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Capybara
|
2
|
+
module SessionMatchers
|
3
|
+
##
|
4
|
+
# Asserts that the page has the given path.
|
5
|
+
# By default this will compare against the path+query portion of the full url
|
6
|
+
#
|
7
|
+
# @!macro current_path_query_params
|
8
|
+
# @overload $0(string, options = {})
|
9
|
+
# @param string [String] The string that the current 'path' should equal
|
10
|
+
# @overload $0(regexp, options = {})
|
11
|
+
# @param regexp [Regexp] The regexp that the current 'path' should match to
|
12
|
+
# @option options [Numeric] :wait (Capybara.default_max_wait_time) Maximum time that Capybara will wait for the current path to eq/match given string/regexp argument
|
13
|
+
# @option options [Boolean] :url (false) Whether the compare should be done against the full url
|
14
|
+
# @option options [Boolean] :only_path (false) Whether the compare should be done against just the path protion of the url
|
15
|
+
# @raise [Capybara::ExpectationNotMet] if the assertion hasn't succeeded during wait time
|
16
|
+
# @return [true]
|
17
|
+
#
|
18
|
+
def assert_current_path(path, options={})
|
19
|
+
query = Capybara::Queries::CurrentPathQuery.new(path, options)
|
20
|
+
document.synchronize(query.wait) do
|
21
|
+
unless query.resolves_for?(self)
|
22
|
+
raise Capybara::ExpectationNotMet, query.failure_message
|
23
|
+
end
|
24
|
+
end
|
25
|
+
return true
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# Asserts that the page doesn't have the given path.
|
30
|
+
#
|
31
|
+
# @macro current_path_query_params
|
32
|
+
# @raise [Capybara::ExpectationNotMet] if the assertion hasn't succeeded during wait time
|
33
|
+
# @return [true]
|
34
|
+
#
|
35
|
+
def assert_no_current_path(path, options={})
|
36
|
+
query = Capybara::Queries::CurrentPathQuery.new(path, options)
|
37
|
+
document.synchronize(query.wait) do
|
38
|
+
if query.resolves_for?(self)
|
39
|
+
raise Capybara::ExpectationNotMet, query.negative_failure_message
|
40
|
+
end
|
41
|
+
end
|
42
|
+
return true
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# Checks if the page has the given path.
|
47
|
+
#
|
48
|
+
# @macro current_path_query_params
|
49
|
+
# @return [Boolean]
|
50
|
+
#
|
51
|
+
def has_current_path?(path, options={})
|
52
|
+
assert_current_path(path, options)
|
53
|
+
rescue Capybara::ExpectationNotMet
|
54
|
+
return false
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# Checks if the page doesn't have the given path.
|
59
|
+
#
|
60
|
+
# @macro current_path_query_params
|
61
|
+
# @return [Boolean]
|
62
|
+
#
|
63
|
+
def has_no_current_path?(path, options={})
|
64
|
+
assert_no_current_path(path, options)
|
65
|
+
rescue Capybara::ExpectationNotMet
|
66
|
+
return false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -100,4 +100,12 @@ $(function() {
|
|
100
100
|
$(this).attr('response', response);
|
101
101
|
}
|
102
102
|
});
|
103
|
+
$('#delayed-page-change').click(function() {
|
104
|
+
setTimeout(function() {
|
105
|
+
window.location.pathname = '/with_html'
|
106
|
+
}, 500)
|
107
|
+
})
|
108
|
+
$('#with-key-events').keydown(function(e){
|
109
|
+
$('#key-events-output').append('keydown:'+e.which+' ')
|
110
|
+
});
|
103
111
|
});
|
@@ -149,4 +149,9 @@ Capybara::SpecHelper.spec "#all" do
|
|
149
149
|
end
|
150
150
|
end
|
151
151
|
end
|
152
|
+
|
153
|
+
it "should have #find_all as an alias" do
|
154
|
+
expect(Capybara::Node::Finders.instance_method(:all)).to eq Capybara::Node::Finders.instance_method(:find_all)
|
155
|
+
expect(@session.find_all('//p').size).to eq(3)
|
156
|
+
end
|
152
157
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
Capybara::SpecHelper.spec '#assert_current_path' do
|
2
|
+
before do
|
3
|
+
@session.visit('/with_js')
|
4
|
+
end
|
5
|
+
|
6
|
+
it "should not raise if the page has the given current path" do
|
7
|
+
expect {@session.assert_current_path('/with_js')}.not_to raise_error
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should allow regexp matches" do
|
11
|
+
expect { @session.assert_current_path(/w[a-z]{3}_js/) }.not_to raise_error
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should wait for current_path", :requires => [:js] do
|
15
|
+
@session.click_link("Change page")
|
16
|
+
expect { @session.assert_current_path("/with_html") }.not_to raise_error
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should raise if the page has not the given current_path" do
|
20
|
+
expect{@session.assert_current_path('/with_html')}.to raise_error(Capybara::ExpectationNotMet, 'expected "/with_js" to equal "/with_html"')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should check query options" do
|
24
|
+
@session.visit('/with_js?test=test')
|
25
|
+
expect{@session.assert_current_path('/with_js?test=test')}.not_to raise_error
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should compare the full url" do
|
29
|
+
expect{@session.assert_current_path(%r{\Ahttp://[^/]*/with_js\Z}, url: true)}.not_to raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should ignore the query" do
|
33
|
+
@session.visit('/with_js?test=test')
|
34
|
+
expect{@session.assert_current_path('/with_js', only_path: true)}.not_to raise_error
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
Capybara::SpecHelper.spec '#assert_no_current_path?' do
|
39
|
+
before do
|
40
|
+
@session.visit('/with_js')
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should raise if the page has the given current_path" do
|
44
|
+
expect{@session.assert_no_current_path('/with_js')}.to raise_error(Capybara::ExpectationNotMet)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should allow regexp matches" do
|
48
|
+
expect{@session.assert_no_current_path(/monkey/)}.not_to raise_error
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should wait for current_path to disappear", :requires => [:js] do
|
52
|
+
@session.click_link("Change page")
|
53
|
+
expect{@session.assert_no_current_path('/with_js')}.not_to raise_error
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should not raise if the page has not the given current_path" do
|
57
|
+
expect{@session.assert_no_current_path('/with_html')}.not_to raise_error
|
58
|
+
end
|
59
|
+
end
|
@@ -189,7 +189,7 @@ Capybara::SpecHelper.spec '#assert_no_text' do
|
|
189
189
|
@session.visit('/with_js')
|
190
190
|
@session.click_link('Click me')
|
191
191
|
@session.find(:css, '#reload-list').click
|
192
|
-
@session.find(:css, '#the-list').assert_no_text('Foo Bar', :wait => 0.
|
192
|
+
@session.find(:css, '#the-list').assert_no_text('Foo Bar', :wait => 0.3)
|
193
193
|
end
|
194
194
|
end
|
195
195
|
end
|
@@ -59,8 +59,8 @@ Capybara::SpecHelper.spec "#attach_file" do
|
|
59
59
|
it "should not break when using HTML5 multiple file input" do
|
60
60
|
@session.attach_file "Multiple Documents", @test_file_path
|
61
61
|
@session.click_button('Upload Multiple')
|
62
|
-
expect(@session.body).to include("1 | ")#number of files
|
63
62
|
expect(@session).to have_content(File.read(@test_file_path))
|
63
|
+
expect(@session.body).to include("1 | ")#number of files
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should not break when using HTML5 multiple file input uploading multiple files" do
|
@@ -74,7 +74,7 @@ Capybara::SpecHelper.spec "#attach_file" do
|
|
74
74
|
|
75
75
|
it "should not send anything when attaching no files to a multiple upload field" do
|
76
76
|
@session.click_button('Upload Empty Multiple')
|
77
|
-
expect(@session
|
77
|
+
expect(@session).to have_content("Successfully ignored empty file field")
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -9,11 +9,13 @@ Capybara::SpecHelper.spec '#body' do
|
|
9
9
|
context "encoding of response between ascii and utf8" do
|
10
10
|
it "should be valid with html entities" do
|
11
11
|
@session.visit('/with_html_entities')
|
12
|
+
expect(@session).to have_content('Encoding') # wait for content to appear if visit is async
|
12
13
|
expect { @session.body.encode!("UTF-8") }.not_to raise_error
|
13
14
|
end
|
14
15
|
|
15
16
|
it "should be valid without html entities" do
|
16
17
|
@session.visit('/with_html')
|
18
|
+
expect(@session).to have_content('This is a test') # wait for content to appear if visit is async
|
17
19
|
expect { @session.body.encode!("UTF-8") }.not_to raise_error
|
18
20
|
end
|
19
21
|
end
|
@@ -11,8 +11,8 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
11
11
|
|
12
12
|
it "casts to string" do
|
13
13
|
@session.click_button(:'Relative Action')
|
14
|
-
expect(@session.current_path).to eq('/relative')
|
15
14
|
expect(extract_results(@session)['relative']).to eq('Relative Action')
|
15
|
+
expect(@session.current_path).to eq('/relative')
|
16
16
|
end
|
17
17
|
|
18
18
|
context "with multiple values with the same name" do
|
@@ -26,16 +26,16 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
26
26
|
context "with a form that has a relative url as an action" do
|
27
27
|
it "should post to the correct url" do
|
28
28
|
@session.click_button('Relative Action')
|
29
|
-
expect(@session.current_path).to eq('/relative')
|
30
29
|
expect(extract_results(@session)['relative']).to eq('Relative Action')
|
30
|
+
expect(@session.current_path).to eq('/relative')
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
context "with a form that has no action specified" do
|
35
35
|
it "should post to the correct url" do
|
36
36
|
@session.click_button('No Action')
|
37
|
-
expect(@session.current_path).to eq('/form')
|
38
37
|
expect(extract_results(@session)['no_action']).to eq('No Action')
|
38
|
+
expect(@session.current_path).to eq('/form')
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -110,7 +110,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
110
110
|
expect(@results['pets']).to include('dog', 'hamster')
|
111
111
|
expect(@results['pets']).not_to include('cat')
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
it "should default checkbox value to 'on' if none specififed" do
|
115
115
|
expect(@results['valueless_checkbox']).to eq('on')
|
116
116
|
end
|
@@ -134,11 +134,11 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
134
134
|
it "should not serialize a select tag without options" do
|
135
135
|
expect(@results['tendency']).to be_nil
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
it "should convert lf to cr/lf in submitted textareas" do
|
139
139
|
expect(@results['newline']).to eq("\r\nNew line after and before textarea tag\r\n")
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
it "should not submit disabled fields" do
|
143
143
|
expect(@results['disabled_text_field']).to be_nil
|
144
144
|
expect(@results['disabled_textarea']).to be_nil
|
@@ -254,7 +254,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
254
254
|
expect(extract_results(@session)['first_name']).to eq('John')
|
255
255
|
end
|
256
256
|
end
|
257
|
-
|
257
|
+
|
258
258
|
|
259
259
|
context "with value given on an image button" do
|
260
260
|
it "should submit the associated form" do
|
@@ -349,8 +349,17 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
349
349
|
context "with formaction attribute on button" do
|
350
350
|
it "should submit to the formaction attribute" do
|
351
351
|
@session.click_button('Formaction button')
|
352
|
+
@results = extract_results(@session)
|
352
353
|
expect(@session.current_path).to eq '/form'
|
354
|
+
expect(@results['which_form']).to eq 'formaction form'
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
context "with formmethod attribute on button" do
|
359
|
+
it "should submit to the formethod attribute" do
|
360
|
+
@session.click_button('Formmethod button')
|
353
361
|
@results = extract_results(@session)
|
362
|
+
expect(@session.current_path).to eq '/form/get'
|
354
363
|
expect(@results['which_form']).to eq 'formaction form'
|
355
364
|
end
|
356
365
|
end
|
@@ -377,8 +386,8 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
377
386
|
|
378
387
|
it "should follow redirects" do
|
379
388
|
@session.click_button('Go FAR')
|
380
|
-
expect(@session.current_url).to match(%r{/landed$})
|
381
389
|
expect(@session).to have_content('You landed')
|
390
|
+
expect(@session.current_url).to match(%r{/landed$})
|
382
391
|
end
|
383
392
|
|
384
393
|
it "should post pack to the same URL when no action given" do
|