bbc-capybara 1.1.2
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/History.txt +325 -0
- data/License.txt +22 -0
- data/README.md +815 -0
- data/lib/capybara.rb +368 -0
- data/lib/capybara/cucumber.rb +25 -0
- data/lib/capybara/driver/base.rb +64 -0
- data/lib/capybara/driver/node.rb +74 -0
- data/lib/capybara/dsl.rb +50 -0
- data/lib/capybara/node/actions.rb +146 -0
- data/lib/capybara/node/base.rb +63 -0
- data/lib/capybara/node/document.rb +25 -0
- data/lib/capybara/node/element.rb +201 -0
- data/lib/capybara/node/finders.rb +154 -0
- data/lib/capybara/node/matchers.rb +442 -0
- data/lib/capybara/node/simple.rb +132 -0
- data/lib/capybara/query.rb +63 -0
- data/lib/capybara/rack_test/browser.rb +126 -0
- data/lib/capybara/rack_test/driver.rb +80 -0
- data/lib/capybara/rack_test/form.rb +80 -0
- data/lib/capybara/rack_test/node.rb +121 -0
- data/lib/capybara/rails.rb +17 -0
- data/lib/capybara/rspec.rb +26 -0
- data/lib/capybara/rspec/features.rb +22 -0
- data/lib/capybara/rspec/matchers.rb +152 -0
- data/lib/capybara/selector.rb +156 -0
- data/lib/capybara/selenium/driver.rb +169 -0
- data/lib/capybara/selenium/node.rb +91 -0
- data/lib/capybara/server.rb +87 -0
- data/lib/capybara/session.rb +322 -0
- data/lib/capybara/spec/driver.rb +329 -0
- data/lib/capybara/spec/fixtures/capybara.jpg +3 -0
- data/lib/capybara/spec/fixtures/test_file.txt +1 -0
- data/lib/capybara/spec/public/jquery-ui.js +791 -0
- data/lib/capybara/spec/public/jquery.js +9046 -0
- data/lib/capybara/spec/public/test.js +43 -0
- data/lib/capybara/spec/session.rb +148 -0
- data/lib/capybara/spec/session/all_spec.rb +78 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +76 -0
- data/lib/capybara/spec/session/check_spec.rb +68 -0
- data/lib/capybara/spec/session/choose_spec.rb +29 -0
- data/lib/capybara/spec/session/click_button_spec.rb +305 -0
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +37 -0
- data/lib/capybara/spec/session/click_link_spec.rb +120 -0
- data/lib/capybara/spec/session/current_url_spec.rb +83 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +127 -0
- data/lib/capybara/spec/session/find_button_spec.rb +18 -0
- data/lib/capybara/spec/session/find_by_id_spec.rb +18 -0
- data/lib/capybara/spec/session/find_field_spec.rb +26 -0
- data/lib/capybara/spec/session/find_link_spec.rb +19 -0
- data/lib/capybara/spec/session/find_spec.rb +168 -0
- data/lib/capybara/spec/session/first_spec.rb +105 -0
- data/lib/capybara/spec/session/has_button_spec.rb +32 -0
- data/lib/capybara/spec/session/has_css_spec.rb +243 -0
- data/lib/capybara/spec/session/has_field_spec.rb +192 -0
- data/lib/capybara/spec/session/has_link_spec.rb +37 -0
- data/lib/capybara/spec/session/has_select_spec.rb +129 -0
- data/lib/capybara/spec/session/has_selector_spec.rb +129 -0
- data/lib/capybara/spec/session/has_table_spec.rb +34 -0
- data/lib/capybara/spec/session/has_text_spec.rb +138 -0
- data/lib/capybara/spec/session/has_xpath_spec.rb +123 -0
- data/lib/capybara/spec/session/headers.rb +19 -0
- data/lib/capybara/spec/session/javascript.rb +312 -0
- data/lib/capybara/spec/session/response_code.rb +19 -0
- data/lib/capybara/spec/session/select_spec.rb +119 -0
- data/lib/capybara/spec/session/text_spec.rb +24 -0
- data/lib/capybara/spec/session/uncheck_spec.rb +21 -0
- data/lib/capybara/spec/session/unselect_spec.rb +67 -0
- data/lib/capybara/spec/session/within_spec.rb +178 -0
- data/lib/capybara/spec/test_app.rb +156 -0
- data/lib/capybara/spec/views/buttons.erb +4 -0
- data/lib/capybara/spec/views/fieldsets.erb +29 -0
- data/lib/capybara/spec/views/form.erb +366 -0
- data/lib/capybara/spec/views/frame_one.erb +8 -0
- data/lib/capybara/spec/views/frame_two.erb +8 -0
- data/lib/capybara/spec/views/header_links.erb +7 -0
- data/lib/capybara/spec/views/host_links.erb +12 -0
- data/lib/capybara/spec/views/popup_one.erb +8 -0
- data/lib/capybara/spec/views/popup_two.erb +8 -0
- data/lib/capybara/spec/views/postback.erb +13 -0
- data/lib/capybara/spec/views/tables.erb +62 -0
- data/lib/capybara/spec/views/with_html.erb +75 -0
- data/lib/capybara/spec/views/with_html_entities.erb +1 -0
- data/lib/capybara/spec/views/with_js.erb +53 -0
- data/lib/capybara/spec/views/with_scope.erb +36 -0
- data/lib/capybara/spec/views/with_simple_html.erb +1 -0
- data/lib/capybara/spec/views/within_frames.erb +10 -0
- data/lib/capybara/spec/views/within_popups.erb +25 -0
- data/lib/capybara/util/save_and_open_page.rb +45 -0
- data/lib/capybara/util/timeout.rb +27 -0
- data/lib/capybara/version.rb +3 -0
- data/spec/basic_node_spec.rb +89 -0
- data/spec/capybara_spec.rb +46 -0
- data/spec/driver/rack_test_driver_spec.rb +90 -0
- data/spec/driver/selenium_driver_spec.rb +55 -0
- data/spec/dsl_spec.rb +255 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +8 -0
- data/spec/fixtures/selenium_driver_rspec_success.rb +8 -0
- data/spec/rspec/features_spec.rb +43 -0
- data/spec/rspec/matchers_spec.rb +564 -0
- data/spec/rspec_spec.rb +51 -0
- data/spec/save_and_open_page_spec.rb +155 -0
- data/spec/server_spec.rb +74 -0
- data/spec/session/rack_test_session_spec.rb +61 -0
- data/spec/session/selenium_session_spec.rb +26 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/timeout_spec.rb +28 -0
- metadata +297 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'capybara/rspec'
|
|
3
|
+
|
|
4
|
+
RSpec.configuration.before(:each, :example_group => {:file_path => __FILE__}) do
|
|
5
|
+
@in_filtered_hook = true
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
feature "Capybara's feature DSL" do
|
|
9
|
+
background do
|
|
10
|
+
@in_background = true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
scenario "includes Capybara" do
|
|
14
|
+
visit('/')
|
|
15
|
+
page.should have_content('Hello world!')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
scenario "preserves description" do
|
|
19
|
+
example.metadata[:full_description].should == "Capybara's feature DSL preserves description"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
scenario "allows driver switching", :driver => :selenium do
|
|
23
|
+
Capybara.current_driver.should == :selenium
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
scenario "runs background" do
|
|
27
|
+
@in_background.should be_true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
scenario "runs hooks filtered by file path" do
|
|
31
|
+
@in_filtered_hook.should be_true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
scenario "doesn't pollute the Object namespace" do
|
|
35
|
+
Object.new.respond_to?(:feature, true).should be_false
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
feature "Capybara's feature DSL with driver", :driver => :culerity do
|
|
40
|
+
scenario "switches driver" do
|
|
41
|
+
Capybara.current_driver.should == :culerity
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'capybara/dsl'
|
|
3
|
+
require 'capybara/rspec/matchers'
|
|
4
|
+
|
|
5
|
+
describe Capybara::RSpecMatchers do
|
|
6
|
+
include Capybara::DSL
|
|
7
|
+
include Capybara::RSpecMatchers
|
|
8
|
+
|
|
9
|
+
describe "have_css matcher" do
|
|
10
|
+
it "gives proper description" do
|
|
11
|
+
have_css('h1').description.should == "has css \"h1\""
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "on a string" do
|
|
15
|
+
context "with should" do
|
|
16
|
+
it "passes if has_css? returns true" do
|
|
17
|
+
"<h1>Text</h1>".should have_css('h1')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "fails if has_css? returns false" do
|
|
21
|
+
expect do
|
|
22
|
+
"<h1>Text</h1>".should have_css('h2')
|
|
23
|
+
end.to raise_error(/expected css "h2" to return something/)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "passes if matched node count equals expected count" do
|
|
27
|
+
"<h1>Text</h1>".should have_css('h1', :count => 1)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "fails if matched node count does not equal expected count" do
|
|
31
|
+
expect do
|
|
32
|
+
"<h1>Text</h1>".should have_css('h1', :count => 2)
|
|
33
|
+
end.to raise_error(/expected css "h1" to be returned 2 times/)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "with should_not" do
|
|
38
|
+
it "passes if has_no_css? returns true" do
|
|
39
|
+
"<h1>Text</h1>".should_not have_css('h2')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "fails if has_no_css? returns false" do
|
|
43
|
+
expect do
|
|
44
|
+
"<h1>Text</h1>".should_not have_css('h1')
|
|
45
|
+
end.to raise_error(/expected css "h1" not to return anything/)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "passes if matched node count does not equal expected count" do
|
|
49
|
+
"<h1>Text</h1>".should_not have_css('h1', :count => 2)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "fails if matched node count equals expected count" do
|
|
53
|
+
expect do
|
|
54
|
+
"<h1>Text</h1>".should_not have_css('h1', :count => 1)
|
|
55
|
+
end.to raise_error(/expected css "h1" not to return anything/)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
context "on a page or node" do
|
|
61
|
+
before do
|
|
62
|
+
visit('/with_html')
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
context "with should" do
|
|
66
|
+
it "passes if has_css? returns true" do
|
|
67
|
+
page.should have_css('h1')
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "fails if has_css? returns false" do
|
|
71
|
+
expect do
|
|
72
|
+
page.should have_css('h1#doesnotexist')
|
|
73
|
+
end.to raise_error(/expected css "h1#doesnotexist" to return something/)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context "with should_not" do
|
|
78
|
+
it "passes if has_no_css? returns true" do
|
|
79
|
+
page.should_not have_css('h1#doesnotexist')
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "fails if has_no_css? returns false" do
|
|
83
|
+
expect do
|
|
84
|
+
page.should_not have_css('h1')
|
|
85
|
+
end.to raise_error(/expected css "h1" not to return anything/)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
describe "have_xpath matcher" do
|
|
92
|
+
it "gives proper description" do
|
|
93
|
+
have_xpath('//h1').description.should == "has xpath \"\/\/h1\""
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
context "on a string" do
|
|
97
|
+
context "with should" do
|
|
98
|
+
it "passes if has_css? returns true" do
|
|
99
|
+
"<h1>Text</h1>".should have_xpath('//h1')
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "fails if has_css? returns false" do
|
|
103
|
+
expect do
|
|
104
|
+
"<h1>Text</h1>".should have_xpath('//h2')
|
|
105
|
+
end.to raise_error(%r(expected xpath "//h2" to return something))
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context "with should_not" do
|
|
110
|
+
it "passes if has_no_css? returns true" do
|
|
111
|
+
"<h1>Text</h1>".should_not have_xpath('//h2')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "fails if has_no_css? returns false" do
|
|
115
|
+
expect do
|
|
116
|
+
"<h1>Text</h1>".should_not have_xpath('//h1')
|
|
117
|
+
end.to raise_error(%r(expected xpath "//h1" not to return anything))
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
context "on a page or node" do
|
|
123
|
+
before do
|
|
124
|
+
visit('/with_html')
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
context "with should" do
|
|
128
|
+
it "passes if has_css? returns true" do
|
|
129
|
+
page.should have_xpath('//h1')
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "fails if has_css? returns false" do
|
|
133
|
+
expect do
|
|
134
|
+
page.should have_xpath("//h1[@id='doesnotexist']")
|
|
135
|
+
end.to raise_error(%r(expected xpath "//h1\[@id='doesnotexist'\]" to return something))
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
context "with should_not" do
|
|
140
|
+
it "passes if has_no_css? returns true" do
|
|
141
|
+
page.should_not have_xpath('//h1[@id="doesnotexist"]')
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "fails if has_no_css? returns false" do
|
|
145
|
+
expect do
|
|
146
|
+
page.should_not have_xpath('//h1')
|
|
147
|
+
end.to raise_error(%r(expected xpath "//h1" not to return anything))
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
describe "have_selector matcher" do
|
|
154
|
+
it "gives proper description" do
|
|
155
|
+
have_selector('//h1').description.should == "has xpath \"//h1\""
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
context "on a string" do
|
|
159
|
+
context "with should" do
|
|
160
|
+
it "passes if has_css? returns true" do
|
|
161
|
+
"<h1>Text</h1>".should have_selector('//h1')
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "fails if has_css? returns false" do
|
|
165
|
+
expect do
|
|
166
|
+
"<h1>Text</h1>".should have_selector('//h2')
|
|
167
|
+
end.to raise_error(%r(expected xpath "//h2" to return something))
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "fails with the selector's failure_message if set" do
|
|
171
|
+
Capybara.add_selector(:monkey) do
|
|
172
|
+
xpath { |num| ".//*[contains(@id, 'monkey')][#{num}]" }
|
|
173
|
+
failure_message { |node, selector| node.all(".//*[contains(@id, 'monkey')]").map { |node| node.text }.sort.join(', ') }
|
|
174
|
+
end
|
|
175
|
+
expect do
|
|
176
|
+
'<h1 id="monkey_paul">Monkey John</h1>'.should have_selector(:monkey, 14)
|
|
177
|
+
end.to raise_error("Monkey John")
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
context "with should_not" do
|
|
182
|
+
it "passes if has_no_css? returns true" do
|
|
183
|
+
"<h1>Text</h1>".should_not have_selector(:css, 'h2')
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "fails if has_no_css? returns false" do
|
|
187
|
+
expect do
|
|
188
|
+
"<h1>Text</h1>".should_not have_selector(:css, 'h1')
|
|
189
|
+
end.to raise_error(%r(expected css "h1" not to return anything))
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
context "on a page or node" do
|
|
195
|
+
before do
|
|
196
|
+
visit('/with_html')
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
context "with should" do
|
|
200
|
+
it "passes if has_css? returns true" do
|
|
201
|
+
page.should have_selector('//h1', :text => 'test')
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it "fails if has_css? returns false" do
|
|
205
|
+
expect do
|
|
206
|
+
page.should have_selector("//h1[@id='doesnotexist']")
|
|
207
|
+
end.to raise_error(%r(expected xpath "//h1\[@id='doesnotexist'\]" to return something))
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it "includes text in error message" do
|
|
211
|
+
expect do
|
|
212
|
+
page.should have_selector("//h1", :text => 'wrong text')
|
|
213
|
+
end.to raise_error(%r(expected xpath "//h1" with text "wrong text" to return something))
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it "fails with the selector's failure_message if set" do
|
|
217
|
+
Capybara.add_selector(:monkey) do
|
|
218
|
+
xpath { |num| ".//*[contains(@id, 'monkey')][#{num}]" }
|
|
219
|
+
failure_message { |node, selector| node.all(".//*[contains(@id, 'monkey')]").map { |node| node.text }.sort.join(', ') }
|
|
220
|
+
end
|
|
221
|
+
expect do
|
|
222
|
+
page.should have_selector(:monkey, 14)
|
|
223
|
+
end.to raise_error("Monkey John, Monkey Paul")
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
context "with should_not" do
|
|
228
|
+
it "passes if has_no_css? returns true" do
|
|
229
|
+
page.should_not have_selector(:css, 'h1#doesnotexist')
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
it "fails if has_no_css? returns false" do
|
|
233
|
+
expect do
|
|
234
|
+
page.should_not have_selector(:css, 'h1', :text => 'test')
|
|
235
|
+
end.to raise_error(%r(expected css "h1" with text "test" not to return anything))
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
describe "have_content matcher" do
|
|
242
|
+
it "gives proper description" do
|
|
243
|
+
have_content('Text').description.should == "has content \"Text\""
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
context "on a string" do
|
|
247
|
+
context "with should" do
|
|
248
|
+
it "passes if has_css? returns true" do
|
|
249
|
+
"<h1>Text</h1>".should have_content('Text')
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it "fails if has_css? returns false" do
|
|
253
|
+
expect do
|
|
254
|
+
"<h1>Text</h1>".should have_content('No such Text')
|
|
255
|
+
end.to raise_error(/expected there to be content "No such Text" in "Text"/)
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
context "with should_not" do
|
|
260
|
+
it "passes if has_no_css? returns true" do
|
|
261
|
+
"<h1>Text</h1>".should_not have_content('No such Text')
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
it "fails if has_no_css? returns false" do
|
|
265
|
+
expect do
|
|
266
|
+
"<h1>Text</h1>".should_not have_content('Text')
|
|
267
|
+
end.to raise_error(/expected content "Text" not to return anything/)
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
context "on a page or node" do
|
|
273
|
+
before do
|
|
274
|
+
visit('/with_html')
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
context "with should" do
|
|
278
|
+
it "passes if has_css? returns true" do
|
|
279
|
+
page.should have_content('This is a test')
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
it "fails if has_css? returns false" do
|
|
283
|
+
expect do
|
|
284
|
+
page.should have_content('No such Text')
|
|
285
|
+
end.to raise_error(/expected there to be content "No such Text" in "(.*)This is a test(.*)"/)
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
context "with default selector CSS" do
|
|
289
|
+
before { Capybara.default_selector = :css }
|
|
290
|
+
it "fails if has_css? returns false" do
|
|
291
|
+
expect do
|
|
292
|
+
page.should have_content('No such Text')
|
|
293
|
+
end.to raise_error(/expected there to be content "No such Text" in "(.*)This is a test(.*)"/)
|
|
294
|
+
end
|
|
295
|
+
after { Capybara.default_selector = :xpath }
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
context "with should_not" do
|
|
300
|
+
it "passes if has_no_css? returns true" do
|
|
301
|
+
page.should_not have_content('No such Text')
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it "fails if has_no_css? returns false" do
|
|
305
|
+
expect do
|
|
306
|
+
page.should_not have_content('This is a test')
|
|
307
|
+
end.to raise_error(/expected content "This is a test" not to return anything/)
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
describe "have_text matcher" do
|
|
314
|
+
it "gives proper description" do
|
|
315
|
+
have_text('Text').description.should == "has text \"Text\""
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
context "on a string" do
|
|
319
|
+
context "with should" do
|
|
320
|
+
it "passes if has_text? returns true" do
|
|
321
|
+
"<h1>Text</h1>".should have_text('Text')
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
it "fails if has_text? returns false" do
|
|
325
|
+
expect do
|
|
326
|
+
"<h1>Text</h1>".should have_text('No such Text')
|
|
327
|
+
end.to raise_error(/expected there to be text "No such Text" in "Text"/)
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
context "with should_not" do
|
|
332
|
+
it "passes if has_no_text? returns true" do
|
|
333
|
+
"<h1>Text</h1>".should_not have_text('No such Text')
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
it "fails if has_no_text? returns false" do
|
|
337
|
+
expect do
|
|
338
|
+
"<h1>Text</h1>".should_not have_text('Text')
|
|
339
|
+
end.to raise_error(/expected text "Text" not to return anything/)
|
|
340
|
+
end
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
context "on a page or node" do
|
|
345
|
+
before do
|
|
346
|
+
visit('/with_html')
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
context "with should" do
|
|
350
|
+
it "passes if has_text? returns true" do
|
|
351
|
+
page.should have_text('This is a test')
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
it "fails if has_text? returns false" do
|
|
355
|
+
expect do
|
|
356
|
+
page.should have_text('No such Text')
|
|
357
|
+
end.to raise_error(/expected there to be text "No such Text" in "(.*)This is a test(.*)"/)
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
context "with default selector CSS" do
|
|
361
|
+
before { Capybara.default_selector = :css }
|
|
362
|
+
it "fails if has_text? returns false" do
|
|
363
|
+
expect do
|
|
364
|
+
page.should have_text('No such Text')
|
|
365
|
+
end.to raise_error(/expected there to be text "No such Text" in "(.*)This is a test(.*)"/)
|
|
366
|
+
end
|
|
367
|
+
after { Capybara.default_selector = :xpath }
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
context "with should_not" do
|
|
372
|
+
it "passes if has_no_text? returns true" do
|
|
373
|
+
page.should_not have_text('No such Text')
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
it "fails if has_no_text? returns false" do
|
|
377
|
+
expect do
|
|
378
|
+
page.should_not have_text('This is a test')
|
|
379
|
+
end.to raise_error(/expected text "This is a test" not to return anything/)
|
|
380
|
+
end
|
|
381
|
+
end
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
describe "have_link matcher" do
|
|
386
|
+
let(:html) { '<a href="#">Just a link</a>' }
|
|
387
|
+
|
|
388
|
+
it "gives proper description" do
|
|
389
|
+
have_link('Just a link').description.should == "has link \"Just a link\""
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
it "passes if there is such a button" do
|
|
393
|
+
html.should have_link('Just a link')
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
it "fails if there is no such button" do
|
|
397
|
+
expect do
|
|
398
|
+
html.should have_link('No such Link')
|
|
399
|
+
end.to raise_error(/expected link "No such Link"/)
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
describe "have_button matcher" do
|
|
404
|
+
let(:html) { '<button>A button</button><input type="submit" value="Another button"/>' }
|
|
405
|
+
|
|
406
|
+
it "gives proper description" do
|
|
407
|
+
have_button('A button').description.should == "has button \"A button\""
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
it "passes if there is such a button" do
|
|
411
|
+
html.should have_button('A button')
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
it "fails if there is no such button" do
|
|
415
|
+
expect do
|
|
416
|
+
html.should have_button('No such Button')
|
|
417
|
+
end.to raise_error(/expected button "No such Button"/)
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
describe "have_field matcher" do
|
|
422
|
+
let(:html) { '<p><label>Text field<input type="text"/></label></p>' }
|
|
423
|
+
|
|
424
|
+
it "gives proper description" do
|
|
425
|
+
have_field('Text field').description.should == "has field \"Text field\""
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
it "passes if there is such a field" do
|
|
429
|
+
html.should have_field('Text field')
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
it "fails if there is no such field" do
|
|
433
|
+
expect do
|
|
434
|
+
html.should have_field('No such Field')
|
|
435
|
+
end.to raise_error(/expected field "No such Field"/)
|
|
436
|
+
end
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
describe "have_checked_field matcher" do
|
|
440
|
+
let(:html) do
|
|
441
|
+
'<label>it is checked<input type="checkbox" checked="checked"/></label>
|
|
442
|
+
<label>unchecked field<input type="checkbox"/></label>'
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
it "gives proper description" do
|
|
446
|
+
have_checked_field('it is checked').description.should == "has checked_field \"it is checked\""
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
context "with should" do
|
|
450
|
+
it "passes if there is such a field and it is checked" do
|
|
451
|
+
html.should have_checked_field('it is checked')
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
it "fails if there is such a field but it is not checked" do
|
|
455
|
+
expect do
|
|
456
|
+
html.should have_checked_field('unchecked field')
|
|
457
|
+
end.to raise_error(/expected checked_field "unchecked field"/)
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
it "fails if there is no such field" do
|
|
461
|
+
expect do
|
|
462
|
+
html.should have_checked_field('no such field')
|
|
463
|
+
end.to raise_error(/expected checked_field "no such field"/)
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
context "with should not" do
|
|
468
|
+
it "fails if there is such a field and it is checked" do
|
|
469
|
+
expect do
|
|
470
|
+
html.should_not have_checked_field('it is checked')
|
|
471
|
+
end.to raise_error(/expected checked_field "it is checked" not to return anything/)
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
it "passes if there is such a field but it is not checked" do
|
|
475
|
+
html.should_not have_checked_field('unchecked field')
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
it "passes if there is no such field" do
|
|
479
|
+
html.should_not have_checked_field('no such field')
|
|
480
|
+
end
|
|
481
|
+
end
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
describe "have_unchecked_field matcher" do
|
|
485
|
+
let(:html) do
|
|
486
|
+
'<label>it is checked<input type="checkbox" checked="checked"/></label>
|
|
487
|
+
<label>unchecked field<input type="checkbox"/></label>'
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
it "gives proper description" do
|
|
491
|
+
have_unchecked_field('unchecked field').description.should == "has unchecked_field \"unchecked field\""
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
context "with should" do
|
|
495
|
+
it "passes if there is such a field and it is not checked" do
|
|
496
|
+
html.should have_unchecked_field('unchecked field')
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
it "fails if there is such a field but it is checked" do
|
|
500
|
+
expect do
|
|
501
|
+
html.should have_unchecked_field('it is checked')
|
|
502
|
+
end.to raise_error(/expected unchecked_field "it is checked"/)
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
it "fails if there is no such field" do
|
|
506
|
+
expect do
|
|
507
|
+
html.should have_unchecked_field('no such field')
|
|
508
|
+
end.to raise_error(/expected unchecked_field "no such field"/)
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
context "with should not" do
|
|
513
|
+
it "fails if there is such a field and it is not checked" do
|
|
514
|
+
expect do
|
|
515
|
+
html.should_not have_unchecked_field('unchecked field')
|
|
516
|
+
end.to raise_error(/expected unchecked_field "unchecked field" not to return anything/)
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
it "passes if there is such a field but it is checked" do
|
|
520
|
+
html.should_not have_unchecked_field('it is checked')
|
|
521
|
+
end
|
|
522
|
+
|
|
523
|
+
it "passes if there is no such field" do
|
|
524
|
+
html.should_not have_unchecked_field('no such field')
|
|
525
|
+
end
|
|
526
|
+
end
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
describe "have_select matcher" do
|
|
530
|
+
let(:html) { '<label>Select Box<select></select></label>' }
|
|
531
|
+
|
|
532
|
+
it "gives proper description" do
|
|
533
|
+
have_select('Select Box').description.should == "has select \"Select Box\""
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
it "passes if there is such a select" do
|
|
537
|
+
html.should have_select('Select Box')
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
it "fails if there is no such select" do
|
|
541
|
+
expect do
|
|
542
|
+
html.should have_select('No such Select box')
|
|
543
|
+
end.to raise_error(/expected select "No such Select box"/)
|
|
544
|
+
end
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
describe "have_table matcher" do
|
|
548
|
+
let(:html) { '<table><caption>Lovely table</caption></table>' }
|
|
549
|
+
|
|
550
|
+
it "gives proper description" do
|
|
551
|
+
have_table('Lovely table').description.should == "has table \"Lovely table\""
|
|
552
|
+
end
|
|
553
|
+
|
|
554
|
+
it "passes if there is such a select" do
|
|
555
|
+
html.should have_table('Lovely table')
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
it "fails if there is no such select" do
|
|
559
|
+
expect do
|
|
560
|
+
html.should have_table('No such Table')
|
|
561
|
+
end.to raise_error(/expected table "No such Table"/)
|
|
562
|
+
end
|
|
563
|
+
end
|
|
564
|
+
end
|