capybara 2.2.1 → 2.3.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 +26 -0
- data/README.md +36 -14
- data/lib/capybara.rb +6 -3
- data/lib/capybara/driver/base.rb +37 -1
- data/lib/capybara/driver/node.rb +10 -2
- data/lib/capybara/helpers.rb +21 -13
- data/lib/capybara/node/base.rb +12 -7
- data/lib/capybara/node/element.rb +17 -1
- data/lib/capybara/node/finders.rb +22 -1
- data/lib/capybara/node/matchers.rb +26 -5
- data/lib/capybara/node/simple.rb +9 -2
- data/lib/capybara/rack_test/css_handlers.rb +3 -1
- data/lib/capybara/rack_test/form.rb +3 -2
- data/lib/capybara/rack_test/node.rb +3 -3
- data/lib/capybara/rspec.rb +1 -0
- data/lib/capybara/rspec/features.rb +2 -1
- data/lib/capybara/rspec/matchers.rb +50 -5
- data/lib/capybara/selenium/driver.rb +76 -12
- data/lib/capybara/selenium/node.rb +8 -0
- data/lib/capybara/server.rb +1 -1
- data/lib/capybara/session.rb +234 -29
- data/lib/capybara/spec/public/jquery.js +1 -1
- data/lib/capybara/spec/public/test.js +7 -0
- data/lib/capybara/spec/session/all_spec.rb +88 -17
- data/lib/capybara/spec/session/assert_selector.rb +6 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +15 -15
- data/lib/capybara/spec/session/body_spec.rb +4 -4
- data/lib/capybara/spec/session/check_spec.rb +16 -16
- data/lib/capybara/spec/session/choose_spec.rb +5 -5
- data/lib/capybara/spec/session/click_button_spec.rb +93 -84
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +8 -8
- data/lib/capybara/spec/session/click_link_spec.rb +26 -19
- data/lib/capybara/spec/session/current_scope_spec.rb +3 -3
- data/lib/capybara/spec/session/current_url_spec.rb +8 -8
- data/lib/capybara/spec/session/evaluate_script_spec.rb +1 -1
- data/lib/capybara/spec/session/execute_script_spec.rb +2 -2
- data/lib/capybara/spec/session/fill_in_spec.rb +22 -22
- data/lib/capybara/spec/session/find_button_spec.rb +4 -4
- data/lib/capybara/spec/session/find_by_id_spec.rb +3 -3
- data/lib/capybara/spec/session/find_field_spec.rb +7 -7
- data/lib/capybara/spec/session/find_link_spec.rb +4 -4
- data/lib/capybara/spec/session/find_spec.rb +46 -46
- data/lib/capybara/spec/session/first_spec.rb +23 -23
- data/lib/capybara/spec/session/go_back_spec.rb +3 -3
- data/lib/capybara/spec/session/go_forward_spec.rb +4 -4
- data/lib/capybara/spec/session/has_button_spec.rb +13 -13
- data/lib/capybara/spec/session/has_css_spec.rb +87 -87
- data/lib/capybara/spec/session/has_field_spec.rb +87 -87
- data/lib/capybara/spec/session/has_link_spec.rb +11 -11
- data/lib/capybara/spec/session/has_select_spec.rb +58 -58
- data/lib/capybara/spec/session/has_selector_spec.rb +48 -48
- data/lib/capybara/spec/session/has_table_spec.rb +7 -7
- data/lib/capybara/spec/session/has_text_spec.rb +73 -73
- data/lib/capybara/spec/session/has_title_spec.rb +10 -10
- data/lib/capybara/spec/session/has_xpath_spec.rb +44 -44
- data/lib/capybara/spec/session/headers.rb +1 -1
- data/lib/capybara/spec/session/html_spec.rb +9 -9
- data/lib/capybara/spec/session/node_spec.rb +81 -65
- data/lib/capybara/spec/session/reset_session_spec.rb +15 -15
- data/lib/capybara/spec/session/response_code.rb +1 -1
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +46 -0
- data/lib/capybara/spec/session/save_page_spec.rb +9 -9
- data/lib/capybara/spec/session/{screenshot.rb → screenshot_spec.rb} +4 -2
- data/lib/capybara/spec/session/select_spec.rb +22 -22
- data/lib/capybara/spec/session/text_spec.rb +15 -10
- data/lib/capybara/spec/session/title_spec.rb +2 -2
- data/lib/capybara/spec/session/uncheck_spec.rb +7 -7
- data/lib/capybara/spec/session/unselect_spec.rb +14 -14
- data/lib/capybara/spec/session/visit_spec.rb +24 -17
- data/lib/capybara/spec/session/window/become_closed_spec.rb +84 -0
- data/lib/capybara/spec/session/window/current_window_spec.rb +25 -0
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +28 -0
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +114 -0
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +83 -0
- data/lib/capybara/spec/session/window/window_spec.rb +141 -0
- data/lib/capybara/spec/session/window/windows_spec.rb +31 -0
- data/lib/capybara/spec/session/window/within_window_spec.rb +188 -0
- data/lib/capybara/spec/session/within_frame_spec.rb +9 -9
- data/lib/capybara/spec/session/within_spec.rb +16 -16
- data/lib/capybara/spec/spec_helper.rb +14 -4
- data/lib/capybara/spec/views/form.erb +7 -0
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/with_js.erb +2 -0
- data/lib/capybara/spec/views/with_windows.erb +38 -0
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +123 -0
- data/spec/basic_node_spec.rb +32 -32
- data/spec/capybara_spec.rb +6 -7
- data/spec/dsl_spec.rb +48 -48
- data/spec/fixtures/selenium_driver_rspec_failure.rb +2 -2
- data/spec/fixtures/selenium_driver_rspec_success.rb +2 -2
- data/spec/rack_test_spec.rb +33 -19
- data/spec/result_spec.rb +13 -13
- data/spec/rspec/features_spec.rb +20 -15
- data/spec/rspec/matchers_spec.rb +109 -109
- data/spec/rspec_spec.rb +10 -10
- data/spec/selenium_spec.rb +31 -6
- data/spec/selenium_spec_chrome.rb +2 -2
- data/spec/server_spec.rb +13 -13
- metadata +51 -62
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/capybara/spec/session/within_window_spec.rb +0 -45
- data/lib/capybara/spec/views/within_popups.erb +0 -25
- metadata.gz.sig +0 -0
data/spec/result_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Capybara::Result do
|
3
|
+
RSpec.describe Capybara::Result do
|
4
4
|
let :string do
|
5
5
|
Capybara.string <<-STRING
|
6
6
|
<ul>
|
@@ -17,7 +17,7 @@ describe Capybara::Result do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "has a length" do
|
20
|
-
result.length.
|
20
|
+
expect(result.length).to eq(4)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "has a first element" do
|
@@ -29,37 +29,37 @@ describe Capybara::Result do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'can supports values_at method' do
|
32
|
-
result.values_at(0, 2).map(&:text).
|
32
|
+
expect(result.values_at(0, 2).map(&:text)).to eq(%w(Alpha Gamma))
|
33
33
|
end
|
34
34
|
|
35
35
|
it "can return an element by its index" do
|
36
|
-
result.at(1).text.
|
37
|
-
result[2].text.
|
36
|
+
expect(result.at(1).text).to eq('Beta')
|
37
|
+
expect(result[2].text).to eq('Gamma')
|
38
38
|
end
|
39
39
|
|
40
40
|
it "can be mapped" do
|
41
|
-
result.map(&:text).
|
41
|
+
expect(result.map(&:text)).to eq(%w(Alpha Beta Gamma Delta))
|
42
42
|
end
|
43
43
|
|
44
44
|
it "can be selected" do
|
45
|
-
result.select do |element|
|
45
|
+
expect(result.select do |element|
|
46
46
|
element.text.include? 't'
|
47
|
-
end.length.
|
47
|
+
end.length).to eq(2)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "can be reduced" do
|
51
|
-
result.reduce('') do |memo, element|
|
51
|
+
expect(result.reduce('') do |memo, element|
|
52
52
|
memo += element.text[0]
|
53
|
-
end.
|
53
|
+
end).to eq('ABGD')
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'can be sampled' do
|
57
|
-
result.
|
57
|
+
expect(result).to include(result.sample)
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'can be indexed' do
|
61
|
-
result.index do |el|
|
61
|
+
expect(result.index do |el|
|
62
62
|
el.text == 'Gamma'
|
63
|
-
end.
|
63
|
+
end).to eq(2)
|
64
64
|
end
|
65
65
|
end
|
data/spec/rspec/features_spec.rb
CHANGED
@@ -5,48 +5,53 @@ RSpec.configuration.before(:each, :example_group => {:file_path => "./spec/rspec
|
|
5
5
|
@in_filtered_hook = true
|
6
6
|
end
|
7
7
|
|
8
|
-
feature "Capybara's feature DSL" do
|
8
|
+
feature "Capybara's feature DSL" do
|
9
9
|
background do
|
10
10
|
@in_background = true
|
11
11
|
end
|
12
|
+
|
13
|
+
def current_example(context)
|
14
|
+
RSpec.respond_to?(:current_example) ? RSpec.current_example : context.example
|
15
|
+
end
|
12
16
|
|
13
17
|
scenario "includes Capybara" do
|
14
18
|
visit('/')
|
15
|
-
page.
|
19
|
+
expect(page).to have_content('Hello world!')
|
16
20
|
end
|
17
21
|
|
18
|
-
scenario "preserves description" do
|
19
|
-
|
22
|
+
scenario "preserves description" do
|
23
|
+
expect(current_example(self).metadata[:full_description])
|
24
|
+
.to eq("Capybara's feature DSL preserves description")
|
20
25
|
end
|
21
26
|
|
22
27
|
scenario "allows driver switching", :driver => :selenium do
|
23
|
-
Capybara.current_driver.
|
28
|
+
expect(Capybara.current_driver).to eq(:selenium)
|
24
29
|
end
|
25
30
|
|
26
31
|
scenario "runs background" do
|
27
|
-
@in_background.
|
32
|
+
expect(@in_background).to be_truthy
|
28
33
|
end
|
29
34
|
|
30
35
|
scenario "runs hooks filtered by file path" do
|
31
|
-
@in_filtered_hook.
|
36
|
+
expect(@in_filtered_hook).to be_truthy
|
32
37
|
end
|
33
38
|
|
34
39
|
scenario "doesn't pollute the Object namespace" do
|
35
|
-
Object.new.respond_to?(:feature, true).
|
40
|
+
expect(Object.new.respond_to?(:feature, true)).to be_falsey
|
36
41
|
end
|
37
42
|
|
38
43
|
feature 'nested features' do
|
39
44
|
scenario 'work as expected' do
|
40
45
|
visit '/'
|
41
|
-
page.
|
46
|
+
expect(page).to have_content 'Hello world!'
|
42
47
|
end
|
43
48
|
|
44
49
|
scenario 'are marked in the metadata as capybara_feature' do
|
45
|
-
|
50
|
+
expect(current_example(self).metadata[:capybara_feature]).to be_truthy
|
46
51
|
end
|
47
52
|
|
48
53
|
scenario 'have a type of :feature' do
|
49
|
-
|
54
|
+
expect(current_example(self).metadata[:type]).to eq :feature
|
50
55
|
end
|
51
56
|
end
|
52
57
|
end
|
@@ -56,12 +61,12 @@ feature "given and given! aliases to let and let!" do
|
|
56
61
|
given!(:value_in_background) { :available }
|
57
62
|
|
58
63
|
background do
|
59
|
-
value_in_background.
|
64
|
+
expect(value_in_background).to be(:available)
|
60
65
|
end
|
61
66
|
|
62
67
|
scenario "given and given! work as intended" do
|
63
|
-
value.
|
64
|
-
value_in_background.
|
68
|
+
expect(value).to be(:available)
|
69
|
+
expect(value_in_background).to be(:available)
|
65
70
|
end
|
66
71
|
end
|
67
72
|
|
@@ -72,6 +77,6 @@ end
|
|
72
77
|
|
73
78
|
feature "Capybara's feature DSL with driver", :driver => :culerity do
|
74
79
|
scenario "switches driver" do
|
75
|
-
Capybara.current_driver.
|
80
|
+
expect(Capybara.current_driver).to eq(:culerity)
|
76
81
|
end
|
77
82
|
end
|
data/spec/rspec/matchers_spec.rb
CHANGED
@@ -2,52 +2,52 @@ require 'spec_helper'
|
|
2
2
|
require 'capybara/dsl'
|
3
3
|
require 'capybara/rspec/matchers'
|
4
4
|
|
5
|
-
describe Capybara::RSpecMatchers do
|
5
|
+
RSpec.describe Capybara::RSpecMatchers do
|
6
6
|
include Capybara::DSL
|
7
7
|
include Capybara::RSpecMatchers
|
8
8
|
|
9
9
|
describe "have_css matcher" do
|
10
10
|
it "gives proper description" do
|
11
|
-
have_css('h1').description.
|
11
|
+
expect(have_css('h1').description).to eq("have css \"h1\"")
|
12
12
|
end
|
13
13
|
|
14
14
|
context "on a string" do
|
15
15
|
context "with should" do
|
16
16
|
it "passes if has_css? returns true" do
|
17
|
-
"<h1>Text</h1>".
|
17
|
+
expect("<h1>Text</h1>").to have_css('h1')
|
18
18
|
end
|
19
19
|
|
20
20
|
it "fails if has_css? returns false" do
|
21
21
|
expect do
|
22
|
-
"<h1>Text</h1>".
|
22
|
+
expect("<h1>Text</h1>").to have_css('h2')
|
23
23
|
end.to raise_error(/expected to find css "h2" but there were no matches/)
|
24
24
|
end
|
25
25
|
|
26
26
|
it "passes if matched node count equals expected count" do
|
27
|
-
"<h1>Text</h1>".
|
27
|
+
expect("<h1>Text</h1>").to have_css('h1', :count => 1)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "fails if matched node count does not equal expected count" do
|
31
31
|
expect do
|
32
|
-
"<h1>Text</h1>".
|
32
|
+
expect("<h1>Text</h1>").to have_css('h1', count: 2)
|
33
33
|
end.to raise_error("expected to find css \"h1\" 2 times, found 1 match: \"Text\"")
|
34
34
|
end
|
35
35
|
|
36
36
|
it "fails if matched node count is less than expected minimum count" do
|
37
37
|
expect do
|
38
|
-
"<h1>Text</h1>".
|
38
|
+
expect("<h1>Text</h1>").to have_css('p', minimum: 1)
|
39
39
|
end.to raise_error("expected to find css \"p\" at least 1 time but there were no matches")
|
40
40
|
end
|
41
41
|
|
42
42
|
it "fails if matched node count is more than expected maximum count" do
|
43
43
|
expect do
|
44
|
-
"<h1>Text</h1><h1>Text</h1><h1>Text</h1>".
|
44
|
+
expect("<h1>Text</h1><h1>Text</h1><h1>Text</h1>").to have_css('h1', maximum: 2)
|
45
45
|
end.to raise_error('expected to find css "h1" at most 2 times, found 3 matches: "Text", "Text", "Text"')
|
46
46
|
end
|
47
47
|
|
48
48
|
it "fails if matched node count does not belong to expected range" do
|
49
49
|
expect do
|
50
|
-
"<h1>Text</h1>".
|
50
|
+
expect("<h1>Text</h1>").to have_css('h1', between: 2..3)
|
51
51
|
end.to raise_error("expected to find css \"h1\" between 2 and 3 times, found 1 match: \"Text\"")
|
52
52
|
end
|
53
53
|
|
@@ -55,22 +55,22 @@ describe Capybara::RSpecMatchers do
|
|
55
55
|
|
56
56
|
context "with should_not" do
|
57
57
|
it "passes if has_no_css? returns true" do
|
58
|
-
"<h1>Text</h1>".
|
58
|
+
expect("<h1>Text</h1>").not_to have_css('h2')
|
59
59
|
end
|
60
60
|
|
61
61
|
it "fails if has_no_css? returns false" do
|
62
62
|
expect do
|
63
|
-
"<h1>Text</h1>".
|
63
|
+
expect("<h1>Text</h1>").not_to have_css('h1')
|
64
64
|
end.to raise_error(/expected not to find css "h1"/)
|
65
65
|
end
|
66
66
|
|
67
67
|
it "passes if matched node count does not equal expected count" do
|
68
|
-
"<h1>Text</h1>".
|
68
|
+
expect("<h1>Text</h1>").not_to have_css('h1', :count => 2)
|
69
69
|
end
|
70
70
|
|
71
71
|
it "fails if matched node count equals expected count" do
|
72
72
|
expect do
|
73
|
-
"<h1>Text</h1>".
|
73
|
+
expect("<h1>Text</h1>").not_to have_css('h1', :count => 1)
|
74
74
|
end.to raise_error(/expected not to find css "h1"/)
|
75
75
|
end
|
76
76
|
end
|
@@ -83,24 +83,24 @@ describe Capybara::RSpecMatchers do
|
|
83
83
|
|
84
84
|
context "with should" do
|
85
85
|
it "passes if has_css? returns true" do
|
86
|
-
page.
|
86
|
+
expect(page).to have_css('h1')
|
87
87
|
end
|
88
88
|
|
89
89
|
it "fails if has_css? returns false" do
|
90
90
|
expect do
|
91
|
-
page.
|
91
|
+
expect(page).to have_css('h1#doesnotexist')
|
92
92
|
end.to raise_error(/expected to find css "h1#doesnotexist" but there were no matches/)
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
96
|
context "with should_not" do
|
97
97
|
it "passes if has_no_css? returns true" do
|
98
|
-
page.
|
98
|
+
expect(page).not_to have_css('h1#doesnotexist')
|
99
99
|
end
|
100
100
|
|
101
101
|
it "fails if has_no_css? returns false" do
|
102
102
|
expect do
|
103
|
-
page.
|
103
|
+
expect(page).not_to have_css('h1')
|
104
104
|
end.to raise_error(/expected not to find css "h1"/)
|
105
105
|
end
|
106
106
|
end
|
@@ -109,30 +109,30 @@ describe Capybara::RSpecMatchers do
|
|
109
109
|
|
110
110
|
describe "have_xpath matcher" do
|
111
111
|
it "gives proper description" do
|
112
|
-
have_xpath('//h1').description.
|
112
|
+
expect(have_xpath('//h1').description).to eq("have xpath \"\/\/h1\"")
|
113
113
|
end
|
114
114
|
|
115
115
|
context "on a string" do
|
116
116
|
context "with should" do
|
117
117
|
it "passes if has_xpath? returns true" do
|
118
|
-
"<h1>Text</h1>".
|
118
|
+
expect("<h1>Text</h1>").to have_xpath('//h1')
|
119
119
|
end
|
120
120
|
|
121
121
|
it "fails if has_xpath? returns false" do
|
122
122
|
expect do
|
123
|
-
"<h1>Text</h1>".
|
123
|
+
expect("<h1>Text</h1>").to have_xpath('//h2')
|
124
124
|
end.to raise_error(%r(expected to find xpath "//h2" but there were no matches))
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
128
|
context "with should_not" do
|
129
129
|
it "passes if has_no_xpath? returns true" do
|
130
|
-
"<h1>Text</h1>".
|
130
|
+
expect("<h1>Text</h1>").not_to have_xpath('//h2')
|
131
131
|
end
|
132
132
|
|
133
133
|
it "fails if has_no_xpath? returns false" do
|
134
134
|
expect do
|
135
|
-
"<h1>Text</h1>".
|
135
|
+
expect("<h1>Text</h1>").not_to have_xpath('//h1')
|
136
136
|
end.to raise_error(%r(expected not to find xpath "//h1"))
|
137
137
|
end
|
138
138
|
end
|
@@ -145,24 +145,24 @@ describe Capybara::RSpecMatchers do
|
|
145
145
|
|
146
146
|
context "with should" do
|
147
147
|
it "passes if has_xpath? returns true" do
|
148
|
-
page.
|
148
|
+
expect(page).to have_xpath('//h1')
|
149
149
|
end
|
150
150
|
|
151
151
|
it "fails if has_xpath? returns false" do
|
152
152
|
expect do
|
153
|
-
page.
|
153
|
+
expect(page).to have_xpath("//h1[@id='doesnotexist']")
|
154
154
|
end.to raise_error(%r(expected to find xpath "//h1\[@id='doesnotexist'\]" but there were no matches))
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
158
158
|
context "with should_not" do
|
159
159
|
it "passes if has_no_xpath? returns true" do
|
160
|
-
page.
|
160
|
+
expect(page).not_to have_xpath('//h1[@id="doesnotexist"]')
|
161
161
|
end
|
162
162
|
|
163
163
|
it "fails if has_no_xpath? returns false" do
|
164
164
|
expect do
|
165
|
-
page.
|
165
|
+
expect(page).not_to have_xpath('//h1')
|
166
166
|
end.to raise_error(%r(expected not to find xpath "//h1"))
|
167
167
|
end
|
168
168
|
end
|
@@ -172,31 +172,31 @@ describe Capybara::RSpecMatchers do
|
|
172
172
|
describe "have_selector matcher" do
|
173
173
|
it "gives proper description" do
|
174
174
|
matcher = have_selector('//h1')
|
175
|
-
"<h1>Text</h1>".
|
176
|
-
matcher.description.
|
175
|
+
expect("<h1>Text</h1>").to matcher
|
176
|
+
expect(matcher.description).to eq("have xpath \"//h1\"")
|
177
177
|
end
|
178
178
|
|
179
179
|
context "on a string" do
|
180
180
|
context "with should" do
|
181
181
|
it "passes if has_selector? returns true" do
|
182
|
-
"<h1>Text</h1>".
|
182
|
+
expect("<h1>Text</h1>").to have_selector('//h1')
|
183
183
|
end
|
184
184
|
|
185
185
|
it "fails if has_selector? returns false" do
|
186
186
|
expect do
|
187
|
-
"<h1>Text</h1>".
|
187
|
+
expect("<h1>Text</h1>").to have_selector('//h2')
|
188
188
|
end.to raise_error(%r(expected to find xpath "//h2" but there were no matches))
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
192
192
|
context "with should_not" do
|
193
193
|
it "passes if has_no_selector? returns true" do
|
194
|
-
"<h1>Text</h1>".
|
194
|
+
expect("<h1>Text</h1>").not_to have_selector(:css, 'h2')
|
195
195
|
end
|
196
196
|
|
197
197
|
it "fails if has_no_selector? returns false" do
|
198
198
|
expect do
|
199
|
-
"<h1>Text</h1>".
|
199
|
+
expect("<h1>Text</h1>").not_to have_selector(:css, 'h1')
|
200
200
|
end.to raise_error(%r(expected not to find css "h1"))
|
201
201
|
end
|
202
202
|
end
|
@@ -209,30 +209,30 @@ describe Capybara::RSpecMatchers do
|
|
209
209
|
|
210
210
|
context "with should" do
|
211
211
|
it "passes if has_selector? returns true" do
|
212
|
-
page.
|
212
|
+
expect(page).to have_selector('//h1', :text => 'test')
|
213
213
|
end
|
214
214
|
|
215
215
|
it "fails if has_selector? returns false" do
|
216
216
|
expect do
|
217
|
-
page.
|
217
|
+
expect(page).to have_selector("//h1[@id='doesnotexist']")
|
218
218
|
end.to raise_error(%r(expected to find xpath "//h1\[@id='doesnotexist'\]" but there were no matches))
|
219
219
|
end
|
220
220
|
|
221
221
|
it "includes text in error message" do
|
222
222
|
expect do
|
223
|
-
page.
|
223
|
+
expect(page).to have_selector("//h1", :text => 'wrong text')
|
224
224
|
end.to raise_error(%r(expected to find xpath "//h1" with text "wrong text" but there were no matches))
|
225
225
|
end
|
226
226
|
end
|
227
227
|
|
228
228
|
context "with should_not" do
|
229
229
|
it "passes if has_no_css? returns true" do
|
230
|
-
page.
|
230
|
+
expect(page).not_to have_selector(:css, 'h1#doesnotexist')
|
231
231
|
end
|
232
232
|
|
233
233
|
it "fails if has_no_selector? returns false" do
|
234
234
|
expect do
|
235
|
-
page.
|
235
|
+
expect(page).not_to have_selector(:css, 'h1', :text => 'test')
|
236
236
|
end.to raise_error(%r(expected not to find css "h1" with text "test"))
|
237
237
|
end
|
238
238
|
end
|
@@ -241,38 +241,38 @@ describe Capybara::RSpecMatchers do
|
|
241
241
|
|
242
242
|
describe "have_content matcher" do
|
243
243
|
it "gives proper description" do
|
244
|
-
have_content('Text').description.
|
244
|
+
expect(have_content('Text').description).to eq("text \"Text\"")
|
245
245
|
end
|
246
246
|
|
247
247
|
context "on a string" do
|
248
248
|
context "with should" do
|
249
249
|
it "passes if has_content? returns true" do
|
250
|
-
"<h1>Text</h1>".
|
250
|
+
expect("<h1>Text</h1>").to have_content('Text')
|
251
251
|
end
|
252
252
|
|
253
253
|
it "passes if has_content? returns true using regexp" do
|
254
|
-
"<h1>Text</h1>".
|
254
|
+
expect("<h1>Text</h1>").to have_content(/ext/)
|
255
255
|
end
|
256
256
|
|
257
257
|
it "fails if has_content? returns false" do
|
258
258
|
expect do
|
259
|
-
"<h1>Text</h1>".
|
259
|
+
expect("<h1>Text</h1>").to have_content('No such Text')
|
260
260
|
end.to raise_error(/expected to find text "No such Text" in "Text"/)
|
261
261
|
end
|
262
262
|
end
|
263
263
|
|
264
264
|
context "with should_not" do
|
265
265
|
it "passes if has_no_content? returns true" do
|
266
|
-
"<h1>Text</h1>".
|
266
|
+
expect("<h1>Text</h1>").not_to have_content('No such Text')
|
267
267
|
end
|
268
268
|
|
269
269
|
it "passes because escapes any characters that would have special meaning in a regexp" do
|
270
|
-
"<h1>Text</h1>".
|
270
|
+
expect("<h1>Text</h1>").not_to have_content('.')
|
271
271
|
end
|
272
272
|
|
273
273
|
it "fails if has_no_content? returns false" do
|
274
274
|
expect do
|
275
|
-
"<h1>Text</h1>".
|
275
|
+
expect("<h1>Text</h1>").not_to have_content('Text')
|
276
276
|
end.to raise_error(/expected not to find text "Text" in "Text"/)
|
277
277
|
end
|
278
278
|
end
|
@@ -285,16 +285,16 @@ describe Capybara::RSpecMatchers do
|
|
285
285
|
|
286
286
|
context "with should" do
|
287
287
|
it "passes if has_content? returns true" do
|
288
|
-
page.
|
288
|
+
expect(page).to have_content('This is a test')
|
289
289
|
end
|
290
290
|
|
291
291
|
it "passes if has_content? returns true using regexp" do
|
292
|
-
page.
|
292
|
+
expect(page).to have_content(/test/)
|
293
293
|
end
|
294
294
|
|
295
295
|
it "fails if has_content? returns false" do
|
296
296
|
expect do
|
297
|
-
page.
|
297
|
+
expect(page).to have_content('No such Text')
|
298
298
|
end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
|
299
299
|
end
|
300
300
|
|
@@ -302,7 +302,7 @@ describe Capybara::RSpecMatchers do
|
|
302
302
|
before { Capybara.default_selector = :css }
|
303
303
|
it "fails if has_content? returns false" do
|
304
304
|
expect do
|
305
|
-
page.
|
305
|
+
expect(page).to have_content('No such Text')
|
306
306
|
end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
|
307
307
|
end
|
308
308
|
after { Capybara.default_selector = :xpath }
|
@@ -311,12 +311,12 @@ describe Capybara::RSpecMatchers do
|
|
311
311
|
|
312
312
|
context "with should_not" do
|
313
313
|
it "passes if has_no_content? returns true" do
|
314
|
-
page.
|
314
|
+
expect(page).not_to have_content('No such Text')
|
315
315
|
end
|
316
316
|
|
317
317
|
it "fails if has_no_content? returns false" do
|
318
318
|
expect do
|
319
|
-
page.
|
319
|
+
expect(page).not_to have_content('This is a test')
|
320
320
|
end.to raise_error(/expected not to find text "This is a test"/)
|
321
321
|
end
|
322
322
|
end
|
@@ -325,68 +325,68 @@ describe Capybara::RSpecMatchers do
|
|
325
325
|
|
326
326
|
describe "have_text matcher" do
|
327
327
|
it "gives proper description" do
|
328
|
-
have_text('Text').description.
|
328
|
+
expect(have_text('Text').description).to eq("text \"Text\"")
|
329
329
|
end
|
330
330
|
|
331
331
|
context "on a string" do
|
332
332
|
context "with should" do
|
333
333
|
it "passes if has_text? returns true" do
|
334
|
-
"<h1>Text</h1>".
|
334
|
+
expect("<h1>Text</h1>").to have_text('Text')
|
335
335
|
end
|
336
336
|
|
337
337
|
it "passes if has_text? returns true using regexp" do
|
338
|
-
"<h1>Text</h1>".
|
338
|
+
expect("<h1>Text</h1>").to have_text(/ext/)
|
339
339
|
end
|
340
340
|
|
341
341
|
it "fails if has_text? returns false" do
|
342
342
|
expect do
|
343
|
-
"<h1>Text</h1>".
|
343
|
+
expect("<h1>Text</h1>").to have_text('No such Text')
|
344
344
|
end.to raise_error(/expected to find text "No such Text" in "Text"/)
|
345
345
|
end
|
346
346
|
|
347
347
|
it "casts Fixnum to string" do
|
348
348
|
expect do
|
349
|
-
"<h1>Text</h1>".
|
349
|
+
expect("<h1>Text</h1>").to have_text(3)
|
350
350
|
end.to raise_error(/expected to find text "3" in "Text"/)
|
351
351
|
end
|
352
352
|
|
353
353
|
it "fails if matched text count does not equal to expected count" do
|
354
354
|
expect do
|
355
|
-
"<h1>Text</h1>".
|
355
|
+
expect("<h1>Text</h1>").to have_text('Text', count: 2)
|
356
356
|
end.to raise_error(/expected to find text "Text" 2 times in "Text"/)
|
357
357
|
end
|
358
358
|
|
359
359
|
it "fails if matched text count is less than expected minimum count" do
|
360
360
|
expect do
|
361
|
-
"<h1>Text</h1>".
|
361
|
+
expect("<h1>Text</h1>").to have_text('Lorem', minimum: 1)
|
362
362
|
end.to raise_error(/expected to find text "Lorem" at least 1 time in "Text"/)
|
363
363
|
end
|
364
364
|
|
365
365
|
it "fails if matched text count is more than expected maximum count" do
|
366
366
|
expect do
|
367
|
-
"<h1>Text TextText</h1>".
|
367
|
+
expect("<h1>Text TextText</h1>").to have_text('Text', maximum: 2)
|
368
368
|
end.to raise_error(/expected to find text "Text" at most 2 times in "Text TextText"/)
|
369
369
|
end
|
370
370
|
|
371
371
|
it "fails if matched text count does not belong to expected range" do
|
372
372
|
expect do
|
373
|
-
"<h1>Text</h1>".
|
373
|
+
expect("<h1>Text</h1>").to have_text('Text', between: 2..3)
|
374
374
|
end.to raise_error(/expected to find text "Text" between 2 and 3 times in "Text"/)
|
375
375
|
end
|
376
376
|
end
|
377
377
|
|
378
378
|
context "with should_not" do
|
379
379
|
it "passes if has_no_text? returns true" do
|
380
|
-
"<h1>Text</h1>".
|
380
|
+
expect("<h1>Text</h1>").not_to have_text('No such Text')
|
381
381
|
end
|
382
382
|
|
383
383
|
it "passes because escapes any characters that would have special meaning in a regexp" do
|
384
|
-
"<h1>Text</h1>".
|
384
|
+
expect("<h1>Text</h1>").not_to have_text('.')
|
385
385
|
end
|
386
386
|
|
387
387
|
it "fails if has_no_text? returns false" do
|
388
388
|
expect do
|
389
|
-
"<h1>Text</h1>".
|
389
|
+
expect("<h1>Text</h1>").not_to have_text('Text')
|
390
390
|
end.to raise_error(/expected not to find text "Text" in "Text"/)
|
391
391
|
end
|
392
392
|
end
|
@@ -399,25 +399,25 @@ describe Capybara::RSpecMatchers do
|
|
399
399
|
|
400
400
|
context "with should" do
|
401
401
|
it "passes if has_text? returns true" do
|
402
|
-
page.
|
402
|
+
expect(page).to have_text('This is a test')
|
403
403
|
end
|
404
404
|
|
405
405
|
it "passes if has_text? returns true using regexp" do
|
406
|
-
page.
|
406
|
+
expect(page).to have_text(/test/)
|
407
407
|
end
|
408
408
|
|
409
409
|
it "can check for all text" do
|
410
|
-
page.
|
410
|
+
expect(page).to have_text(:all, 'Some of this text is hidden!')
|
411
411
|
end
|
412
412
|
|
413
413
|
it "can check for visible text" do
|
414
|
-
page.
|
415
|
-
page.
|
414
|
+
expect(page).to have_text(:visible, 'Some of this text is')
|
415
|
+
expect(page).not_to have_text(:visible, 'Some of this text is hidden!')
|
416
416
|
end
|
417
417
|
|
418
418
|
it "fails if has_text? returns false" do
|
419
419
|
expect do
|
420
|
-
page.
|
420
|
+
expect(page).to have_text('No such Text')
|
421
421
|
end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
|
422
422
|
end
|
423
423
|
|
@@ -425,7 +425,7 @@ describe Capybara::RSpecMatchers do
|
|
425
425
|
before { Capybara.default_selector = :css }
|
426
426
|
it "fails if has_text? returns false" do
|
427
427
|
expect do
|
428
|
-
page.
|
428
|
+
expect(page).to have_text('No such Text')
|
429
429
|
end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
|
430
430
|
end
|
431
431
|
after { Capybara.default_selector = :xpath }
|
@@ -434,12 +434,12 @@ describe Capybara::RSpecMatchers do
|
|
434
434
|
|
435
435
|
context "with should_not" do
|
436
436
|
it "passes if has_no_text? returns true" do
|
437
|
-
page.
|
437
|
+
expect(page).not_to have_text('No such Text')
|
438
438
|
end
|
439
439
|
|
440
440
|
it "fails if has_no_text? returns false" do
|
441
441
|
expect do
|
442
|
-
page.
|
442
|
+
expect(page).not_to have_text('This is a test')
|
443
443
|
end.to raise_error(/expected not to find text "This is a test"/)
|
444
444
|
end
|
445
445
|
end
|
@@ -450,35 +450,35 @@ describe Capybara::RSpecMatchers do
|
|
450
450
|
let(:html) { '<a href="#">Just a link</a>' }
|
451
451
|
|
452
452
|
it "gives proper description" do
|
453
|
-
have_link('Just a link').description.
|
453
|
+
expect(have_link('Just a link').description).to eq("have link \"Just a link\"")
|
454
454
|
end
|
455
455
|
|
456
456
|
it "passes if there is such a button" do
|
457
|
-
html.
|
457
|
+
expect(html).to have_link('Just a link')
|
458
458
|
end
|
459
459
|
|
460
460
|
it "fails if there is no such button" do
|
461
461
|
expect do
|
462
|
-
html.
|
462
|
+
expect(html).to have_link('No such Link')
|
463
463
|
end.to raise_error(/expected to find link "No such Link"/)
|
464
464
|
end
|
465
465
|
end
|
466
466
|
|
467
467
|
describe "have_title matcher" do
|
468
468
|
it "gives proper description" do
|
469
|
-
have_title('Just a title').description.
|
469
|
+
expect(have_title('Just a title').description).to eq("have title \"Just a title\"")
|
470
470
|
end
|
471
471
|
|
472
472
|
context "on a string" do
|
473
473
|
let(:html) { '<title>Just a title</title>' }
|
474
474
|
|
475
475
|
it "passes if there is such a title" do
|
476
|
-
html.
|
476
|
+
expect(html).to have_title('Just a title')
|
477
477
|
end
|
478
478
|
|
479
479
|
it "fails if there is no such title" do
|
480
480
|
expect do
|
481
|
-
html.
|
481
|
+
expect(html).to have_title('No such title')
|
482
482
|
end.to raise_error(/expected there to be title "No such title"/)
|
483
483
|
end
|
484
484
|
end
|
@@ -489,12 +489,12 @@ describe Capybara::RSpecMatchers do
|
|
489
489
|
end
|
490
490
|
|
491
491
|
it "passes if there is such a title" do
|
492
|
-
page.
|
492
|
+
expect(page).to have_title('with_js')
|
493
493
|
end
|
494
494
|
|
495
495
|
it "fails if there is no such title" do
|
496
496
|
expect do
|
497
|
-
page.
|
497
|
+
expect(page).to have_title('No such title')
|
498
498
|
end.to raise_error(/expected there to be title "No such title"/)
|
499
499
|
end
|
500
500
|
end
|
@@ -504,16 +504,16 @@ describe Capybara::RSpecMatchers do
|
|
504
504
|
let(:html) { '<button>A button</button><input type="submit" value="Another button"/>' }
|
505
505
|
|
506
506
|
it "gives proper description" do
|
507
|
-
have_button('A button').description.
|
507
|
+
expect(have_button('A button').description).to eq("have button \"A button\"")
|
508
508
|
end
|
509
509
|
|
510
510
|
it "passes if there is such a button" do
|
511
|
-
html.
|
511
|
+
expect(html).to have_button('A button')
|
512
512
|
end
|
513
513
|
|
514
514
|
it "fails if there is no such button" do
|
515
515
|
expect do
|
516
|
-
html.
|
516
|
+
expect(html).to have_button('No such Button')
|
517
517
|
end.to raise_error(/expected to find button "No such Button"/)
|
518
518
|
end
|
519
519
|
end
|
@@ -522,30 +522,30 @@ describe Capybara::RSpecMatchers do
|
|
522
522
|
let(:html) { '<p><label>Text field<input type="text" value="some value"/></label></p>' }
|
523
523
|
|
524
524
|
it "gives proper description" do
|
525
|
-
have_field('Text field').description.
|
525
|
+
expect(have_field('Text field').description).to eq("have field \"Text field\"")
|
526
526
|
end
|
527
527
|
|
528
528
|
it "gives proper description for a given value" do
|
529
|
-
have_field('Text field', with: 'some value').description.
|
529
|
+
expect(have_field('Text field', with: 'some value').description).to eq("have field \"Text field\" with value \"some value\"")
|
530
530
|
end
|
531
531
|
|
532
532
|
it "passes if there is such a field" do
|
533
|
-
html.
|
533
|
+
expect(html).to have_field('Text field')
|
534
534
|
end
|
535
535
|
|
536
536
|
it "passes if there is such a field with value" do
|
537
|
-
html.
|
537
|
+
expect(html).to have_field('Text field', with: 'some value')
|
538
538
|
end
|
539
539
|
|
540
540
|
it "fails if there is no such field" do
|
541
541
|
expect do
|
542
|
-
html.
|
542
|
+
expect(html).to have_field('No such Field')
|
543
543
|
end.to raise_error(/expected to find field "No such Field"/)
|
544
544
|
end
|
545
545
|
|
546
546
|
it "fails if there is such field but with false value" do
|
547
547
|
expect do
|
548
|
-
html.
|
548
|
+
expect(html).to have_field('Text field', with: 'false value')
|
549
549
|
end.to raise_error(/expected to find field "Text field"/)
|
550
550
|
end
|
551
551
|
|
@@ -555,7 +555,7 @@ describe Capybara::RSpecMatchers do
|
|
555
555
|
"some value"
|
556
556
|
end
|
557
557
|
end
|
558
|
-
html.
|
558
|
+
expect(html).to have_field('Text field', with: Foo.new)
|
559
559
|
end
|
560
560
|
end
|
561
561
|
|
@@ -566,23 +566,23 @@ describe Capybara::RSpecMatchers do
|
|
566
566
|
end
|
567
567
|
|
568
568
|
it "gives proper description" do
|
569
|
-
have_checked_field('it is checked').description.
|
569
|
+
expect(have_checked_field('it is checked').description).to eq("have field \"it is checked\"")
|
570
570
|
end
|
571
571
|
|
572
572
|
context "with should" do
|
573
573
|
it "passes if there is such a field and it is checked" do
|
574
|
-
html.
|
574
|
+
expect(html).to have_checked_field('it is checked')
|
575
575
|
end
|
576
576
|
|
577
577
|
it "fails if there is such a field but it is not checked" do
|
578
578
|
expect do
|
579
|
-
html.
|
579
|
+
expect(html).to have_checked_field('unchecked field')
|
580
580
|
end.to raise_error(/expected to find field "unchecked field"/)
|
581
581
|
end
|
582
582
|
|
583
583
|
it "fails if there is no such field" do
|
584
584
|
expect do
|
585
|
-
html.
|
585
|
+
expect(html).to have_checked_field('no such field')
|
586
586
|
end.to raise_error(/expected to find field "no such field"/)
|
587
587
|
end
|
588
588
|
end
|
@@ -590,16 +590,16 @@ describe Capybara::RSpecMatchers do
|
|
590
590
|
context "with should not" do
|
591
591
|
it "fails if there is such a field and it is checked" do
|
592
592
|
expect do
|
593
|
-
html.
|
593
|
+
expect(html).not_to have_checked_field('it is checked')
|
594
594
|
end.to raise_error(/expected not to find field "it is checked"/)
|
595
595
|
end
|
596
596
|
|
597
597
|
it "passes if there is such a field but it is not checked" do
|
598
|
-
html.
|
598
|
+
expect(html).not_to have_checked_field('unchecked field')
|
599
599
|
end
|
600
600
|
|
601
601
|
it "passes if there is no such field" do
|
602
|
-
html.
|
602
|
+
expect(html).not_to have_checked_field('no such field')
|
603
603
|
end
|
604
604
|
end
|
605
605
|
end
|
@@ -611,23 +611,23 @@ describe Capybara::RSpecMatchers do
|
|
611
611
|
end
|
612
612
|
|
613
613
|
it "gives proper description" do
|
614
|
-
have_unchecked_field('unchecked field').description.
|
614
|
+
expect(have_unchecked_field('unchecked field').description).to eq("have field \"unchecked field\"")
|
615
615
|
end
|
616
616
|
|
617
617
|
context "with should" do
|
618
618
|
it "passes if there is such a field and it is not checked" do
|
619
|
-
html.
|
619
|
+
expect(html).to have_unchecked_field('unchecked field')
|
620
620
|
end
|
621
621
|
|
622
622
|
it "fails if there is such a field but it is checked" do
|
623
623
|
expect do
|
624
|
-
html.
|
624
|
+
expect(html).to have_unchecked_field('it is checked')
|
625
625
|
end.to raise_error(/expected to find field "it is checked"/)
|
626
626
|
end
|
627
627
|
|
628
628
|
it "fails if there is no such field" do
|
629
629
|
expect do
|
630
|
-
html.
|
630
|
+
expect(html).to have_unchecked_field('no such field')
|
631
631
|
end.to raise_error(/expected to find field "no such field"/)
|
632
632
|
end
|
633
633
|
end
|
@@ -635,16 +635,16 @@ describe Capybara::RSpecMatchers do
|
|
635
635
|
context "with should not" do
|
636
636
|
it "fails if there is such a field and it is not checked" do
|
637
637
|
expect do
|
638
|
-
html.
|
638
|
+
expect(html).not_to have_unchecked_field('unchecked field')
|
639
639
|
end.to raise_error(/expected not to find field "unchecked field"/)
|
640
640
|
end
|
641
641
|
|
642
642
|
it "passes if there is such a field but it is checked" do
|
643
|
-
html.
|
643
|
+
expect(html).not_to have_unchecked_field('it is checked')
|
644
644
|
end
|
645
645
|
|
646
646
|
it "passes if there is no such field" do
|
647
|
-
html.
|
647
|
+
expect(html).not_to have_unchecked_field('no such field')
|
648
648
|
end
|
649
649
|
end
|
650
650
|
end
|
@@ -653,16 +653,16 @@ describe Capybara::RSpecMatchers do
|
|
653
653
|
let(:html) { '<label>Select Box<select></select></label>' }
|
654
654
|
|
655
655
|
it "gives proper description" do
|
656
|
-
have_select('Select Box').description.
|
656
|
+
expect(have_select('Select Box').description).to eq("have select box \"Select Box\"")
|
657
657
|
end
|
658
658
|
|
659
659
|
it "passes if there is such a select" do
|
660
|
-
html.
|
660
|
+
expect(html).to have_select('Select Box')
|
661
661
|
end
|
662
662
|
|
663
663
|
it "fails if there is no such select" do
|
664
664
|
expect do
|
665
|
-
html.
|
665
|
+
expect(html).to have_select('No such Select box')
|
666
666
|
end.to raise_error(/expected to find select box "No such Select box"/)
|
667
667
|
end
|
668
668
|
end
|
@@ -671,16 +671,16 @@ describe Capybara::RSpecMatchers do
|
|
671
671
|
let(:html) { '<table><caption>Lovely table</caption></table>' }
|
672
672
|
|
673
673
|
it "gives proper description" do
|
674
|
-
have_table('Lovely table').description.
|
674
|
+
expect(have_table('Lovely table').description).to eq("have table \"Lovely table\"")
|
675
675
|
end
|
676
676
|
|
677
677
|
it "passes if there is such a select" do
|
678
|
-
html.
|
678
|
+
expect(html).to have_table('Lovely table')
|
679
679
|
end
|
680
680
|
|
681
681
|
it "fails if there is no such select" do
|
682
682
|
expect do
|
683
|
-
html.
|
683
|
+
expect(html).to have_table('No such Table')
|
684
684
|
end.to raise_error(/expected to find table "No such Table"/)
|
685
685
|
end
|
686
686
|
end
|