capybara 2.0.3 → 2.1.0.beta1
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.
- data.tar.gz.sig +0 -0
- data/History.md +73 -0
- data/README.md +52 -5
- data/lib/capybara.rb +44 -62
- data/lib/capybara/cucumber.rb +4 -1
- data/lib/capybara/driver/base.rb +13 -9
- data/lib/capybara/driver/node.rb +18 -6
- data/lib/capybara/helpers.rb +111 -22
- data/lib/capybara/node/actions.rb +24 -19
- data/lib/capybara/node/base.rb +25 -32
- data/lib/capybara/node/document.rb +6 -2
- data/lib/capybara/node/element.rb +45 -7
- data/lib/capybara/node/finders.rb +48 -21
- data/lib/capybara/node/matchers.rb +38 -21
- data/lib/capybara/node/simple.rb +29 -7
- data/lib/capybara/query.rb +72 -26
- data/lib/capybara/rack_test/browser.rb +11 -3
- data/lib/capybara/rack_test/css_handlers.rb +8 -0
- data/lib/capybara/rack_test/driver.rb +11 -3
- data/lib/capybara/rack_test/form.rb +8 -1
- data/lib/capybara/rack_test/node.rb +92 -36
- data/lib/capybara/rails.rb +1 -2
- data/lib/capybara/result.rb +21 -37
- data/lib/capybara/rspec/matchers.rb +60 -31
- data/lib/capybara/selector.rb +46 -13
- data/lib/capybara/selenium/driver.rb +42 -6
- data/lib/capybara/selenium/node.rb +23 -5
- data/lib/capybara/session.rb +46 -11
- data/lib/capybara/spec/public/test.js +12 -0
- data/lib/capybara/spec/session/all_spec.rb +9 -8
- data/lib/capybara/spec/session/attach_file_spec.rb +14 -0
- data/lib/capybara/spec/session/check_spec.rb +14 -0
- data/lib/capybara/spec/session/choose_spec.rb +14 -0
- data/lib/capybara/spec/session/click_button_spec.rb +77 -1
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +65 -0
- data/lib/capybara/spec/session/click_link_spec.rb +24 -0
- data/lib/capybara/spec/session/current_scope_spec.rb +29 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +14 -0
- data/lib/capybara/spec/session/find_button_spec.rb +12 -0
- data/lib/capybara/spec/session/find_by_id_spec.rb +12 -1
- data/lib/capybara/spec/session/find_field_spec.rb +30 -0
- data/lib/capybara/spec/session/find_link_spec.rb +12 -0
- data/lib/capybara/spec/session/find_spec.rb +258 -16
- data/lib/capybara/spec/session/first_spec.rb +25 -8
- data/lib/capybara/spec/session/has_css_spec.rb +2 -2
- data/lib/capybara/spec/session/has_field_spec.rb +10 -2
- data/lib/capybara/spec/session/has_selector_spec.rb +9 -0
- data/lib/capybara/spec/session/has_text_spec.rb +96 -0
- data/lib/capybara/spec/session/has_title_spec.rb +47 -0
- data/lib/capybara/spec/session/node_spec.rb +43 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +10 -2
- data/lib/capybara/spec/session/save_page_spec.rb +30 -0
- data/lib/capybara/spec/session/select_spec.rb +65 -0
- data/lib/capybara/spec/session/text_spec.rb +31 -0
- data/lib/capybara/spec/session/title_spec.rb +16 -0
- data/lib/capybara/spec/session/uncheck_spec.rb +14 -0
- data/lib/capybara/spec/session/unselect_spec.rb +42 -0
- data/lib/capybara/spec/session/visit_spec.rb +3 -3
- data/lib/capybara/spec/session/within_frame_spec.rb +14 -0
- data/lib/capybara/spec/session/within_spec.rb +3 -3
- data/lib/capybara/spec/spec_helper.rb +6 -1
- data/lib/capybara/spec/views/form.erb +39 -2
- data/lib/capybara/spec/views/frame_child.erb +9 -0
- data/lib/capybara/spec/views/frame_parent.erb +8 -0
- data/lib/capybara/spec/views/with_base_tag.erb +10 -0
- data/lib/capybara/spec/views/with_count.erb +7 -0
- data/lib/capybara/spec/views/with_hover.erb +17 -0
- data/lib/capybara/spec/views/with_html.erb +21 -2
- data/lib/capybara/spec/views/with_js.erb +5 -0
- data/lib/capybara/spec/views/with_scope.erb +6 -1
- data/lib/capybara/spec/views/with_title.erb +1 -0
- data/lib/capybara/spec/views/within_frames.erb +1 -0
- data/lib/capybara/version.rb +1 -1
- data/spec/basic_node_spec.rb +75 -24
- data/spec/dsl_spec.rb +2 -1
- data/spec/rack_test_spec.rb +4 -3
- data/spec/rspec/matchers_spec.rb +105 -17
- data/spec/server_spec.rb +8 -8
- data/spec/spec_helper.rb +2 -1
- metadata +83 -23
- metadata.gz.sig +0 -0
@@ -38,22 +38,39 @@ Capybara::SpecHelper.spec '#first' do
|
|
38
38
|
@session.first('h1').text.should == 'This is a test'
|
39
39
|
@session.first("input[id='test_field']")[:value].should == 'monkey'
|
40
40
|
end
|
41
|
-
after { Capybara.default_selector = :xpath }
|
42
41
|
end
|
43
42
|
|
44
43
|
context "with visible filter" do
|
45
|
-
|
46
|
-
it "should only find visible nodes if true given" do
|
47
|
-
@session.first(:css, "a#invisible").should_not be_nil
|
44
|
+
it "should only find visible nodes when true" do
|
48
45
|
@session.first(:css, "a#invisible", :visible => true).should be_nil
|
49
|
-
Capybara.ignore_hidden_elements = true
|
50
|
-
@session.first(:css, "a#invisible").should be_nil
|
51
46
|
end
|
52
47
|
|
53
|
-
it "should
|
54
|
-
Capybara.ignore_hidden_elements = true
|
48
|
+
it "should find nodes regardless of whether they are invisible when false" do
|
55
49
|
@session.first(:css, "a#invisible", :visible => false).should_not be_nil
|
50
|
+
@session.first(:css, "a#visible", :visible => false).should_not be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should find nodes regardless of whether they are invisible when :all" do
|
54
|
+
@session.first(:css, "a#invisible", :visible => :all).should_not be_nil
|
55
|
+
@session.first(:css, "a#visible", :visible => :all).should_not be_nil
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should find only hidden nodes when :hidden" do
|
59
|
+
@session.first(:css, "a#invisible", :visible => :hidden).should_not be_nil
|
60
|
+
@session.first(:css, "a#visible", :visible => :hidden).should be_nil
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should find only visible nodes when :visible" do
|
64
|
+
@session.first(:css, "a#invisible", :visible => :visible).should be_nil
|
65
|
+
@session.first(:css, "a#visible", :visible => :visible).should_not be_nil
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should default to Capybara.ignore_hidden_elements" do
|
69
|
+
Capybara.ignore_hidden_elements = true
|
56
70
|
@session.first(:css, "a#invisible").should be_nil
|
71
|
+
Capybara.ignore_hidden_elements = false
|
72
|
+
@session.first(:css, "a#invisible").should_not be_nil
|
73
|
+
@session.first(:css, "a").should_not be_nil
|
57
74
|
end
|
58
75
|
end
|
59
76
|
|
@@ -70,7 +70,7 @@ Capybara::SpecHelper.spec '#has_css?' do
|
|
70
70
|
|
71
71
|
it "should be false when content occurs more times than given" do
|
72
72
|
@session.should_not have_css("h2.head", :maximum => 4) # edge case
|
73
|
-
@session.should_not have_css("h2", :maximum =>
|
73
|
+
@session.should_not have_css("h2", :maximum => 3)
|
74
74
|
@session.should_not have_css("p", :maximum => 1)
|
75
75
|
end
|
76
76
|
|
@@ -184,7 +184,7 @@ Capybara::SpecHelper.spec '#has_no_css?' do
|
|
184
184
|
|
185
185
|
it "should be true when content occurs more times than given" do
|
186
186
|
@session.should have_no_css("h2.head", :maximum => 4) # edge case
|
187
|
-
@session.should have_no_css("h2", :maximum =>
|
187
|
+
@session.should have_no_css("h2", :maximum => 3)
|
188
188
|
@session.should have_no_css("p", :maximum => 1)
|
189
189
|
end
|
190
190
|
|
@@ -42,12 +42,16 @@ Capybara::SpecHelper.spec '#has_field' do
|
|
42
42
|
@session.should have_field('First Name', :type => 'text')
|
43
43
|
@session.should have_field('Html5 Email', :type => 'email')
|
44
44
|
@session.should have_field('Html5 Tel', :type => 'tel')
|
45
|
+
@session.should have_field('Description', :type => 'textarea')
|
46
|
+
@session.should have_field('Languages', :type => 'select')
|
45
47
|
end
|
46
48
|
|
47
49
|
it "should be false if the given field is not on the page" do
|
48
|
-
@session.should_not have_field('First Name', :type => '
|
50
|
+
@session.should_not have_field('First Name', :type => 'textarea')
|
49
51
|
@session.should_not have_field('Html5 Email', :type => 'tel')
|
50
52
|
@session.should_not have_field('Description', :type => '')
|
53
|
+
@session.should_not have_field('Description', :type => 'email')
|
54
|
+
@session.should_not have_field('Languages', :type => 'textarea')
|
51
55
|
end
|
52
56
|
end
|
53
57
|
end
|
@@ -95,12 +99,16 @@ Capybara::SpecHelper.spec '#has_no_field' do
|
|
95
99
|
@session.should_not have_no_field('First Name', :type => 'text')
|
96
100
|
@session.should_not have_no_field('Html5 Email', :type => 'email')
|
97
101
|
@session.should_not have_no_field('Html5 Tel', :type => 'tel')
|
102
|
+
@session.should_not have_no_field('Description', :type => 'textarea')
|
103
|
+
@session.should_not have_no_field('Languages', :type => 'select')
|
98
104
|
end
|
99
105
|
|
100
106
|
it "should be true if the given field is not on the page" do
|
101
|
-
@session.should have_no_field('First Name', :type => '
|
107
|
+
@session.should have_no_field('First Name', :type => 'textarea')
|
102
108
|
@session.should have_no_field('Html5 Email', :type => 'tel')
|
103
109
|
@session.should have_no_field('Description', :type => '')
|
110
|
+
@session.should have_no_field('Description', :type => 'email')
|
111
|
+
@session.should have_no_field('Languages', :type => 'textarea')
|
104
112
|
end
|
105
113
|
end
|
106
114
|
end
|
@@ -53,6 +53,15 @@ Capybara::SpecHelper.spec '#has_selector?' do
|
|
53
53
|
@session.should_not have_selector("//p", :text => "Doesnotexist")
|
54
54
|
end
|
55
55
|
|
56
|
+
it "should respect visibility setting" do
|
57
|
+
@session.should have_selector(:id, "hidden-text", :text => "Some of this text is hidden!", :visible => false)
|
58
|
+
@session.should_not have_selector(:id, "hidden-text", :text => "Some of this text is hidden!", :visible => true)
|
59
|
+
Capybara.ignore_hidden_elements = false
|
60
|
+
@session.should have_selector(:id, "hidden-text", :text => "Some of this text is hidden!", :visible => false)
|
61
|
+
Capybara.visible_text_only = true
|
62
|
+
@session.should_not have_selector(:id, "hidden-text", :text => "Some of this text is hidden!", :visible => true)
|
63
|
+
end
|
64
|
+
|
56
65
|
it "should discard all matches where the given regexp is not matched" do
|
57
66
|
@session.should have_selector("//p//a", :text => /re[dab]i/i, :count => 1)
|
58
67
|
@session.should_not have_selector("//p//a", :text => /Red$/)
|
@@ -74,6 +74,17 @@ Capybara::SpecHelper.spec '#has_text?' do
|
|
74
74
|
@session.should_not have_text('Inside element with hidden ancestor')
|
75
75
|
end
|
76
76
|
|
77
|
+
it "should be true if :all given and text is invisible." do
|
78
|
+
@session.visit('/with_html')
|
79
|
+
@session.should have_text(:all, 'Some of this text is hidden!')
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should be true if `Capybara.ignore_hidden_elements = true` and text is invisible." do
|
83
|
+
Capybara.ignore_hidden_elements = false
|
84
|
+
@session.visit('/with_html')
|
85
|
+
@session.should have_text('Some of this text is hidden!')
|
86
|
+
end
|
87
|
+
|
77
88
|
it "should be true if the text in the page matches given regexp" do
|
78
89
|
@session.visit('/with_html')
|
79
90
|
@session.should have_text(/Lorem/)
|
@@ -105,6 +116,80 @@ Capybara::SpecHelper.spec '#has_text?' do
|
|
105
116
|
@session.click_link('Click me')
|
106
117
|
@session.should have_text("Has been clicked")
|
107
118
|
end
|
119
|
+
|
120
|
+
context "with between" do
|
121
|
+
it "should be true if the text occurs within the range given" do
|
122
|
+
@session.visit('/with_count')
|
123
|
+
@session.should have_text('count', between: 1..3)
|
124
|
+
@session.should have_text(/count/, between: 2..2)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should be false if the text occurs more or fewer times than range" do
|
128
|
+
@session.visit('/with_count')
|
129
|
+
@session.should_not have_text('count', between: 0..1)
|
130
|
+
@session.should_not have_text('count', between: 3..10)
|
131
|
+
@session.should_not have_text(/count/, between: 2...2)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context "with count" do
|
136
|
+
it "should be true if the text occurs the given number of times" do
|
137
|
+
@session.visit('/with_count')
|
138
|
+
@session.should have_text('count', count: 2)
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should be false if the text occurs a different number of times than the given" do
|
142
|
+
@session.visit('/with_count')
|
143
|
+
@session.should_not have_text('count', count: 0)
|
144
|
+
@session.should_not have_text('count', count: 1)
|
145
|
+
@session.should_not have_text(/count/, count: 3)
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should coerce count to an integer" do
|
149
|
+
@session.visit('/with_count')
|
150
|
+
@session.should have_text('count', count: '2')
|
151
|
+
@session.should_not have_text('count', count: '3')
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
context "with maximum" do
|
156
|
+
it "should be true when text occurs same or fewer times than given" do
|
157
|
+
@session.visit('/with_count')
|
158
|
+
@session.should have_text('count', maximum: 2)
|
159
|
+
@session.should have_text(/count/, maximum: 3)
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should be false when text occurs more times than given" do
|
163
|
+
@session.visit('/with_count')
|
164
|
+
@session.should_not have_text('count', maximum: 1)
|
165
|
+
@session.should_not have_text('count', maximum: 0)
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should coerce maximum to an integer" do
|
169
|
+
@session.visit('/with_count')
|
170
|
+
@session.should have_text('count', maximum: '2')
|
171
|
+
@session.should_not have_text('count', maximum: '1')
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "with minimum" do
|
176
|
+
it "should be true when text occurs same or more times than given" do
|
177
|
+
@session.visit('/with_count')
|
178
|
+
@session.should have_text('count', minimum: 2)
|
179
|
+
@session.should have_text(/count/, minimum: 0)
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should be false when text occurs fewer times than given" do
|
183
|
+
@session.visit('/with_count')
|
184
|
+
@session.should_not have_text('count', minimum: 3)
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should coerce minimum to an integer" do
|
188
|
+
@session.visit('/with_count')
|
189
|
+
@session.should have_text('count', minimum: '2')
|
190
|
+
@session.should_not have_text('count', minimum: '3')
|
191
|
+
end
|
192
|
+
end
|
108
193
|
end
|
109
194
|
|
110
195
|
Capybara::SpecHelper.spec '#has_no_text?' do
|
@@ -172,6 +257,17 @@ Capybara::SpecHelper.spec '#has_no_text?' do
|
|
172
257
|
@session.should have_no_text('Inside element with hidden ancestor')
|
173
258
|
end
|
174
259
|
|
260
|
+
it "should be false if :all given and text is invisible." do
|
261
|
+
@session.visit('/with_html')
|
262
|
+
@session.should_not have_no_text(:all, 'Some of this text is hidden!')
|
263
|
+
end
|
264
|
+
|
265
|
+
it "should be false if `Capybara.ignore_hidden_elements = true` and text is invisible." do
|
266
|
+
Capybara.ignore_hidden_elements = false
|
267
|
+
@session.visit('/with_html')
|
268
|
+
@session.should_not have_no_text('Some of this text is hidden!')
|
269
|
+
end
|
270
|
+
|
175
271
|
it "should be true if the text in the page doesn't match given regexp" do
|
176
272
|
@session.visit('/with_html')
|
177
273
|
@session.should have_no_text(/xxxxyzzz/)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
Capybara::SpecHelper.spec '#has_title?' do
|
2
|
+
before do
|
3
|
+
@session.visit('/with_js')
|
4
|
+
end
|
5
|
+
|
6
|
+
it "should be true if the page has the given title" do
|
7
|
+
@session.should have_title('with_js')
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should allow regexp matches" do
|
11
|
+
@session.should have_title(/w[a-z]{3}_js/)
|
12
|
+
@session.should_not have_title(/monkey/)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should wait for title", :requires => [:js] do
|
16
|
+
@session.click_link("Change title")
|
17
|
+
@session.should have_title("changed title")
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be false if the page has not the given title" do
|
21
|
+
@session.should_not have_title('monkey')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Capybara::SpecHelper.spec '#has_no_title?' do
|
26
|
+
before do
|
27
|
+
@session.visit('/with_js')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be false if the page has the given title" do
|
31
|
+
@session.should_not have_no_title('with_js')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should allow regexp matches" do
|
35
|
+
@session.should_not have_no_title(/w[a-z]{3}_js/)
|
36
|
+
@session.should have_no_title(/monkey/)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should wait for title to disappear", :requires => [:js] do
|
40
|
+
@session.click_link("Change title")
|
41
|
+
@session.should have_no_title('with_js')
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should be true if the page has not the given title" do
|
45
|
+
@session.should have_no_title('monkey')
|
46
|
+
end
|
47
|
+
end
|
@@ -71,6 +71,18 @@ Capybara::SpecHelper.spec "node" do
|
|
71
71
|
@session.first('//input').set('')
|
72
72
|
@session.first('//input').value.should == ''
|
73
73
|
end
|
74
|
+
|
75
|
+
it "should not set if the text field is readonly" do
|
76
|
+
@session.first('//input[@readonly]').value.should == 'should not change'
|
77
|
+
@session.first('//input[@readonly]').set('changed')
|
78
|
+
@session.first('//input[@readonly]').value.should == 'should not change'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should not set if the textarea is readonly" do
|
82
|
+
@session.first('//textarea[@readonly]').value.should == 'textarea should not change'
|
83
|
+
@session.first('//textarea[@readonly]').set('changed')
|
84
|
+
@session.first('//textarea[@readonly]').value.should == 'textarea should not change'
|
85
|
+
end
|
74
86
|
end
|
75
87
|
|
76
88
|
describe "#tag_name" do
|
@@ -81,8 +93,29 @@ Capybara::SpecHelper.spec "node" do
|
|
81
93
|
end
|
82
94
|
end
|
83
95
|
|
96
|
+
describe "#disabled?" do
|
97
|
+
it "should extract disabled node" do
|
98
|
+
@session.visit('/form')
|
99
|
+
@session.find('//input[@id="customer_name"]').should be_disabled
|
100
|
+
@session.find('//input[@id="customer_email"]').should_not be_disabled
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should see disabled options as disabled" do
|
104
|
+
@session.visit('/form')
|
105
|
+
@session.find('//select[@id="form_title"]/option[1]').should_not be_disabled
|
106
|
+
@session.find('//select[@id="form_title"]/option[@disabled]').should be_disabled
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should see enabled options in disabled select as disabled" do
|
110
|
+
@session.visit('/form')
|
111
|
+
@session.find('//select[@id="form_disabled_select"]/option').should be_disabled
|
112
|
+
@session.find('//select[@id="form_title"]/option[1]').should_not be_disabled
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
84
116
|
describe "#visible?" do
|
85
117
|
it "should extract node visibility" do
|
118
|
+
Capybara.ignore_hidden_elements = false
|
86
119
|
@session.first('//a').should be_visible
|
87
120
|
|
88
121
|
@session.find('//div[@id="hidden"]').should_not be_visible
|
@@ -137,6 +170,16 @@ Capybara::SpecHelper.spec "node" do
|
|
137
170
|
@session.find('//div[contains(., "Dropped!")]').should_not be_nil
|
138
171
|
end
|
139
172
|
end
|
173
|
+
|
174
|
+
describe '#hover', :requires => [:hover] do
|
175
|
+
it "should allow hovering on an element" do
|
176
|
+
pending "Selenium with firefox doesn't currently work with this (selenium with chrome does)" if @session.respond_to?(:mode) && @session.mode == :selenium && @session.driver.browser.browser == :firefox
|
177
|
+
@session.visit('/with_hover')
|
178
|
+
@session.find(:css,'.hidden_until_hover', :visible => false).should_not be_visible
|
179
|
+
@session.find(:css,'.wrapper').hover
|
180
|
+
@session.find(:css, '.hidden_until_hover', :visible => false).should be_visible
|
181
|
+
end
|
182
|
+
end
|
140
183
|
|
141
184
|
describe '#reload', :requires => [:js] do
|
142
185
|
context "without automatic reload" do
|
@@ -31,12 +31,20 @@ Capybara::SpecHelper.spec '#reset_session!' do
|
|
31
31
|
@session.should have_no_selector('.//h1')
|
32
32
|
end
|
33
33
|
|
34
|
-
it "raises any errors caught inside the server" do
|
34
|
+
it "raises any errors caught inside the server", :requires => [:server] do
|
35
|
+
quietly { @session.visit("/error") }
|
35
36
|
expect do
|
36
|
-
quietly { @session.visit("/error") }
|
37
37
|
@session.reset_session!
|
38
38
|
end.to raise_error(TestApp::TestAppError)
|
39
39
|
@session.visit("/")
|
40
40
|
@session.current_path.should == "/"
|
41
41
|
end
|
42
|
+
|
43
|
+
it "ignores server errors when `Capybara.raise_server_errors = false`", :requires => [:server] do
|
44
|
+
Capybara.raise_server_errors = false
|
45
|
+
quietly { @session.visit("/error") }
|
46
|
+
@session.reset_session!
|
47
|
+
@session.visit("/")
|
48
|
+
@session.current_path.should == "/"
|
49
|
+
end
|
42
50
|
end
|
@@ -43,4 +43,34 @@ Capybara::SpecHelper.spec '#save_page' do
|
|
43
43
|
filename = path.split("/").last
|
44
44
|
result.should == filename
|
45
45
|
end
|
46
|
+
|
47
|
+
context "asset_host contains a string" do
|
48
|
+
before { Capybara.asset_host = "http://example.com" }
|
49
|
+
after { Capybara.asset_host = nil }
|
50
|
+
|
51
|
+
it "prepends base tag with value from asset_host to the head" do
|
52
|
+
@session.visit("/with_js")
|
53
|
+
path = @session.save_page
|
54
|
+
|
55
|
+
result = File.read(path)
|
56
|
+
result.should include("<head><base href='http://example.com' />")
|
57
|
+
end
|
58
|
+
|
59
|
+
it "doesn't prepend base tag to pages when asset_host is nil" do
|
60
|
+
Capybara.asset_host = nil
|
61
|
+
@session.visit("/with_js")
|
62
|
+
path = @session.save_page
|
63
|
+
|
64
|
+
result = File.read(path)
|
65
|
+
result.should_not include("http://example.com")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "doesn't prepend base tag to pages which already have it" do
|
69
|
+
@session.visit("/with_base_tag")
|
70
|
+
path = @session.save_page
|
71
|
+
|
72
|
+
result = File.read(path)
|
73
|
+
result.should_not include("http://example.com")
|
74
|
+
end
|
75
|
+
end
|
46
76
|
end
|
@@ -12,6 +12,29 @@ Capybara::SpecHelper.spec "#select" do
|
|
12
12
|
@session.find_field('Title').value.should == 'Miss'
|
13
13
|
end
|
14
14
|
|
15
|
+
it "should allow selecting options where there are inexact matches" do
|
16
|
+
@session.select("Mr", :from => 'Title')
|
17
|
+
@session.find_field('Title').value.should == 'Mr'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should allow selecting options where they are the only inexact match" do
|
21
|
+
@session.select("Mis", :from => 'Title')
|
22
|
+
@session.find_field('Title').value.should == 'Miss'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should not allow selecting options where they are the only inexact match if `Capybara.exact_options = true`" do
|
26
|
+
Capybara.exact_options = true
|
27
|
+
expect do
|
28
|
+
@session.select("Mis", :from => 'Title')
|
29
|
+
end.to raise_error(Capybara::ElementNotFound)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should not allow selecting an option if the match is ambiguous" do
|
33
|
+
expect do
|
34
|
+
@session.select("M", :from => 'Title')
|
35
|
+
end.to raise_error(Capybara::Ambiguous)
|
36
|
+
end
|
37
|
+
|
15
38
|
it "should return the value attribute rather than content if present" do
|
16
39
|
@session.find_field('Locale').value.should == 'en'
|
17
40
|
end
|
@@ -121,4 +144,46 @@ Capybara::SpecHelper.spec "#select" do
|
|
121
144
|
@session.find_field('Underwear').value.should include('thermal')
|
122
145
|
end
|
123
146
|
end
|
147
|
+
|
148
|
+
context "with :exact option" do
|
149
|
+
context "when `false`" do
|
150
|
+
it "can match select box approximately" do
|
151
|
+
@session.select("Finish", :from => "Loc", :exact => false)
|
152
|
+
@session.click_button("awesome")
|
153
|
+
extract_results(@session)["locale"].should == "fi"
|
154
|
+
end
|
155
|
+
|
156
|
+
it "can match option approximately" do
|
157
|
+
@session.select("Fin", :from => "Locale", :exact => false)
|
158
|
+
@session.click_button("awesome")
|
159
|
+
extract_results(@session)["locale"].should == "fi"
|
160
|
+
end
|
161
|
+
|
162
|
+
it "can match option approximately when :from not given" do
|
163
|
+
@session.select("made-up language", :exact => false)
|
164
|
+
@session.click_button("awesome")
|
165
|
+
extract_results(@session)["locale"].should == "jo"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context "when `true`" do
|
170
|
+
it "can match select box approximately" do
|
171
|
+
expect do
|
172
|
+
@session.select("Finish", :from => "Loc", :exact => true)
|
173
|
+
end.to raise_error(Capybara::ElementNotFound)
|
174
|
+
end
|
175
|
+
|
176
|
+
it "can match option approximately" do
|
177
|
+
expect do
|
178
|
+
@session.select("Fin", :from => "Locale", :exact => true)
|
179
|
+
end.to raise_error(Capybara::ElementNotFound)
|
180
|
+
end
|
181
|
+
|
182
|
+
it "can match option approximately when :from not given" do
|
183
|
+
expect do
|
184
|
+
@session.select("made-up language", :exact => true)
|
185
|
+
end.to raise_error(Capybara::ElementNotFound)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
124
189
|
end
|