capybara_minitest_spec 0.2.2 → 1.0.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.
- data/.rvmrc +1 -1
- data/HISTORY.md +0 -0
- data/README.md +31 -32
- data/Rakefile +2 -2
- data/capybara_minitest_spec.gemspec +6 -4
- data/lib/capybara_minitest_spec.rb +53 -6
- data/lib/capybara_minitest_spec/test_name.rb +67 -0
- data/lib/capybara_minitest_spec/version.rb +1 -1
- data/spec/capybara_minitest_spec.spec.rb +13 -0
- data/spec/capybara_rspec_matchers.spec.rb +580 -0
- data/spec/helper.rb +39 -0
- data/{test_app → spec/test_app}/test_app.rb +0 -0
- data/{test_app → spec/test_app}/views/buttons.erb +0 -0
- data/{test_app → spec/test_app}/views/fieldsets.erb +0 -0
- data/{test_app → spec/test_app}/views/form.erb +0 -0
- data/{test_app → spec/test_app}/views/frame_one.erb +0 -0
- data/{test_app → spec/test_app}/views/frame_two.erb +0 -0
- data/{test_app → spec/test_app}/views/header_links.erb +0 -0
- data/{test_app → spec/test_app}/views/host_links.erb +0 -0
- data/{test_app → spec/test_app}/views/popup_one.erb +0 -0
- data/{test_app → spec/test_app}/views/popup_two.erb +0 -0
- data/{test_app → spec/test_app}/views/postback.erb +0 -0
- data/{test_app → spec/test_app}/views/tables.erb +0 -0
- data/{test_app → spec/test_app}/views/with_html.erb +0 -0
- data/{test_app → spec/test_app}/views/with_html_entities.erb +0 -0
- data/{test_app → spec/test_app}/views/with_js.erb +0 -0
- data/{test_app → spec/test_app}/views/with_scope.erb +0 -0
- data/{test_app → spec/test_app}/views/with_simple_html.erb +0 -0
- data/{test_app → spec/test_app}/views/within_frames.erb +0 -0
- data/{test_app → spec/test_app}/views/within_popups.erb +0 -0
- data/spec/test_name.spec.rb +47 -0
- metadata +142 -121
- data/lib/capybara_minitest_spec/matcher.rb +0 -126
- data/test/capybara_node_matchers_spec.rb +0 -471
- data/test/custom_matcher_spec.rb +0 -29
- data/test/matcher_spec.rb +0 -45
- data/test/spec_helper.rb +0 -14
- data/test_app/driver.rb +0 -297
- data/test_app/fixtures/capybara.jpg +0 -3
- data/test_app/fixtures/test_file.txt +0 -1
- data/test_app/public/test.js +0 -43
- data/test_app/session.rb +0 -154
- data/test_app/session/all_spec.rb +0 -78
- data/test_app/session/attach_file_spec.rb +0 -73
- data/test_app/session/check_spec.rb +0 -65
- data/test_app/session/choose_spec.rb +0 -26
- data/test_app/session/click_button_spec.rb +0 -304
- data/test_app/session/click_link_or_button_spec.rb +0 -36
- data/test_app/session/click_link_spec.rb +0 -119
- data/test_app/session/current_host_spec.rb +0 -68
- data/test_app/session/current_url_spec.rb +0 -15
- data/test_app/session/fill_in_spec.rb +0 -125
- data/test_app/session/find_button_spec.rb +0 -18
- data/test_app/session/find_by_id_spec.rb +0 -18
- data/test_app/session/find_field_spec.rb +0 -26
- data/test_app/session/find_link_spec.rb +0 -19
- data/test_app/session/find_spec.rb +0 -149
- data/test_app/session/first_spec.rb +0 -105
- data/test_app/session/has_button_spec.rb +0 -32
- data/test_app/session/has_content_spec.rb +0 -106
- data/test_app/session/has_css_spec.rb +0 -243
- data/test_app/session/has_field_spec.rb +0 -192
- data/test_app/session/has_link_spec.rb +0 -37
- data/test_app/session/has_select_spec.rb +0 -129
- data/test_app/session/has_selector_spec.rb +0 -129
- data/test_app/session/has_table_spec.rb +0 -96
- data/test_app/session/has_xpath_spec.rb +0 -123
- data/test_app/session/headers.rb +0 -19
- data/test_app/session/javascript.rb +0 -289
- data/test_app/session/response_code.rb +0 -19
- data/test_app/session/select_spec.rb +0 -113
- data/test_app/session/text_spec.rb +0 -19
- data/test_app/session/uncheck_spec.rb +0 -21
- data/test_app/session/unselect_spec.rb +0 -61
- data/test_app/session/within_spec.rb +0 -178
data/test/custom_matcher_spec.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class Capybara::Session
|
4
|
-
def has_flash_message?(message)
|
5
|
-
within '#flash' do
|
6
|
-
has_content? message
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
CapybaraMiniTestSpec::Matcher.new(:has_flash_message?)
|
11
|
-
|
12
|
-
describe 'Custom matcher' do
|
13
|
-
include Capybara::DSL
|
14
|
-
|
15
|
-
before :each do
|
16
|
-
Capybara.default_selector = :css
|
17
|
-
visit '/flash_message'
|
18
|
-
end
|
19
|
-
|
20
|
-
after { Capybara.default_selector = :xpath }
|
21
|
-
|
22
|
-
it 'works with positive expectation' do
|
23
|
-
page.must_have_flash_message 'Barry Allen'
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'works with negative expectation' do
|
27
|
-
page.wont_have_flash_message 'The Blob'
|
28
|
-
end
|
29
|
-
end
|
data/test/matcher_spec.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CapybaraMiniTestSpec::Matcher do
|
4
|
-
|
5
|
-
let(:matcher) { CapybaraMiniTestSpec::Matcher.new(:has_css?) }
|
6
|
-
|
7
|
-
it 'should define an assertion' do
|
8
|
-
MiniTest::Assertions.public_instance_methods.must_include(:assert_page_has_css)
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'should define a refutation' do
|
12
|
-
MiniTest::Assertions.public_instance_methods.must_include(:refute_page_has_css)
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'should define positive expectation' do
|
16
|
-
MiniTest::Expectations.public_instance_methods.must_include(:must_have_css)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should define negative expectation' do
|
20
|
-
MiniTest::Expectations.public_instance_methods.must_include(:wont_have_css)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should wrap the asserted object in a Capybara::Node::Simple' do
|
24
|
-
matcher.send(:wrap, '').must_be_instance_of(Capybara::Node::Simple)
|
25
|
-
end
|
26
|
-
|
27
|
-
it '#test returns true when test passes' do
|
28
|
-
test_result = matcher.test('<h1>Test</h1>', 'h1', {:count => 1})
|
29
|
-
end
|
30
|
-
|
31
|
-
it '#test returns false when test fails' do
|
32
|
-
test_result = matcher.test('<h1>Test</h1>', 'h2', {:count => 1})
|
33
|
-
end
|
34
|
-
|
35
|
-
it "#failure_message with 'assert' arg returns positive assertion failure message" do
|
36
|
-
message = CapybaraMiniTestSpec::Matcher.failure_message('assert', :has_css?, {:option => 1})
|
37
|
-
message.must_equal 'Matcher failed: has_css?({:option=>1})'
|
38
|
-
end
|
39
|
-
|
40
|
-
it "#failure_message with 'refute' arg returns negative assertion failure message" do
|
41
|
-
message = CapybaraMiniTestSpec::Matcher.failure_message('refute', :has_css?, {:option => 1})
|
42
|
-
message.must_equal 'Matcher should have failed: has_css?({:option=>1})'
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
data/test/spec_helper.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'bundler/setup'
|
2
|
-
|
3
|
-
require 'minitest/autorun'
|
4
|
-
require 'capybara/dsl'
|
5
|
-
|
6
|
-
require 'capybara_minitest_spec'
|
7
|
-
|
8
|
-
# Make all specs a subclass of MiniTest::Spec.
|
9
|
-
MiniTest::Spec.register_spec_type //, MiniTest::Spec
|
10
|
-
|
11
|
-
# Setup Rack test app.
|
12
|
-
$LOAD_PATH << File.join(__FILE__, '../../test_app')
|
13
|
-
require 'test_app'
|
14
|
-
Capybara.app = TestApp
|
data/test_app/driver.rb
DELETED
@@ -1,297 +0,0 @@
|
|
1
|
-
require 'capybara/spec/test_app'
|
2
|
-
|
3
|
-
shared_examples_for 'driver' do
|
4
|
-
|
5
|
-
describe '#visit' do
|
6
|
-
it "should move to another page" do
|
7
|
-
@driver.visit('/')
|
8
|
-
@driver.body.should include('Hello world!')
|
9
|
-
@driver.visit('/foo')
|
10
|
-
@driver.body.should include('Another World')
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should show the correct URL" do
|
14
|
-
@driver.visit('/foo')
|
15
|
-
@driver.current_url.should include('/foo')
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#body' do
|
20
|
-
it "should return text reponses" do
|
21
|
-
@driver.visit('/')
|
22
|
-
@driver.body.should include('Hello world!')
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should return the full response html" do
|
26
|
-
@driver.visit('/with_simple_html')
|
27
|
-
@driver.body.should include('Bar')
|
28
|
-
end
|
29
|
-
|
30
|
-
if "".respond_to?(:encoding)
|
31
|
-
context "encoding of response between ascii and utf8" do
|
32
|
-
it "should be valid with html entities" do
|
33
|
-
@driver.visit('/with_html_entities')
|
34
|
-
lambda { @driver.body.encode!("UTF-8") }.should_not raise_error
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should be valid without html entities" do
|
38
|
-
@driver.visit('/with_html')
|
39
|
-
lambda { @driver.body.encode!("UTF-8") }.should_not raise_error
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe '#find' do
|
46
|
-
context "with xpath selector" do
|
47
|
-
before do
|
48
|
-
@driver.visit('/with_html')
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should extract node texts" do
|
52
|
-
@driver.find('//a')[0].text.should == 'labore'
|
53
|
-
@driver.find('//a')[1].text.should == 'ullamco'
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should extract node attributes" do
|
57
|
-
@driver.find('//a')[0][:class].should == 'simple'
|
58
|
-
@driver.find('//a')[1][:id].should == 'foo'
|
59
|
-
@driver.find('//input')[0][:type].should == 'text'
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should extract boolean node attributes" do
|
63
|
-
@driver.find('//input[@id="checked_field"]')[0][:checked].should be_true
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should allow retrieval of the value" do
|
67
|
-
@driver.find('//textarea').first.value.should == 'banana'
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should allow assignment of field value" do
|
71
|
-
@driver.find('//input').first.value.should == 'monkey'
|
72
|
-
@driver.find('//input').first.set('gorilla')
|
73
|
-
@driver.find('//input').first.value.should == 'gorilla'
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should extract node tag name" do
|
77
|
-
@driver.find('//a')[0].tag_name.should == 'a'
|
78
|
-
@driver.find('//a')[1].tag_name.should == 'a'
|
79
|
-
@driver.find('//p')[1].tag_name.should == 'p'
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should extract node visibility" do
|
83
|
-
@driver.find('//a')[0].should be_visible
|
84
|
-
|
85
|
-
@driver.find('//div[@id="hidden"]')[0].should_not be_visible
|
86
|
-
@driver.find('//div[@id="hidden_via_ancestor"]')[0].should_not be_visible
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should extract node checked state" do
|
90
|
-
@driver.visit('/form')
|
91
|
-
@driver.find('//input[@id="gender_female"]')[0].should be_checked
|
92
|
-
@driver.find('//input[@id="gender_male"]')[0].should_not be_checked
|
93
|
-
@driver.find('//h1')[0].should_not be_checked
|
94
|
-
end
|
95
|
-
|
96
|
-
it "should extract node selected state" do
|
97
|
-
@driver.visit('/form')
|
98
|
-
@driver.find('//option[@value="en"]')[0].should be_selected
|
99
|
-
@driver.find('//option[@value="sv"]')[0].should_not be_selected
|
100
|
-
@driver.find('//h1')[0].should_not be_selected
|
101
|
-
end
|
102
|
-
|
103
|
-
it "should return document text on /html selector" do
|
104
|
-
@driver.visit('/with_simple_html')
|
105
|
-
@driver.find('/html')[0].text.should == 'Bar'
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
shared_examples_for "driver with javascript support" do
|
112
|
-
before { @driver.visit('/with_js') }
|
113
|
-
|
114
|
-
describe '#find' do
|
115
|
-
it "should find dynamically changed nodes" do
|
116
|
-
@driver.find('//p').first.text.should == 'I changed it'
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
describe '#drag_to' do
|
121
|
-
it "should drag and drop an object" do
|
122
|
-
draggable = @driver.find('//div[@id="drag"]').first
|
123
|
-
droppable = @driver.find('//div[@id="drop"]').first
|
124
|
-
draggable.drag_to(droppable)
|
125
|
-
@driver.find('//div[contains(., "Dropped!")]').should_not be_empty
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
describe "#evaluate_script" do
|
130
|
-
it "should return the value of the executed script" do
|
131
|
-
@driver.evaluate_script('1+1').should == 2
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
end
|
136
|
-
|
137
|
-
shared_examples_for "driver with resynchronization support" do
|
138
|
-
before { @driver.visit('/with_js') }
|
139
|
-
describe "#find" do
|
140
|
-
context "with synchronization turned on" do
|
141
|
-
before { @driver.options[:resynchronize] = true }
|
142
|
-
it "should wait for all ajax requests to finish" do
|
143
|
-
@driver.find('//input[@id="fire_ajax_request"]').first.click
|
144
|
-
@driver.find('//p[@id="ajax_request_done"]').should_not be_empty
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
context "with resynchronization turned off" do
|
149
|
-
before { @driver.options[:resynchronize] = false }
|
150
|
-
it "should not wait for ajax requests to finish" do
|
151
|
-
@driver.find('//input[@id="fire_ajax_request"]').first.click
|
152
|
-
@driver.find('//p[@id="ajax_request_done"]').should be_empty
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context "with short synchronization timeout" do
|
157
|
-
before { @driver.options[:resynchronize] = true }
|
158
|
-
before { @driver.options[:resynchronization_timeout] = 0.1 }
|
159
|
-
|
160
|
-
it "should raise an error" do
|
161
|
-
expect do
|
162
|
-
@driver.find('//input[@id="fire_ajax_request"]').first.click
|
163
|
-
end.to raise_error(Capybara::TimeoutError, "failed to resynchronize, ajax request timed out")
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
after { @driver.options[:resynchronize] = false }
|
169
|
-
after { @driver.options[:resynchronization_timeout] = 10 }
|
170
|
-
end
|
171
|
-
|
172
|
-
shared_examples_for "driver with header support" do
|
173
|
-
it "should make headers available through response_headers" do
|
174
|
-
@driver.visit('/with_simple_html')
|
175
|
-
@driver.response_headers['Content-Type'].should =~ /text\/html/
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
shared_examples_for "driver with status code support" do
|
180
|
-
it "should make the status code available through status_code" do
|
181
|
-
@driver.visit('/with_simple_html')
|
182
|
-
@driver.status_code.should == 200
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
shared_examples_for "driver without status code support" do
|
187
|
-
it "should raise when trying to access the status code available through status_code" do
|
188
|
-
@driver.visit('/with_simple_html')
|
189
|
-
lambda {
|
190
|
-
@driver.status_code
|
191
|
-
}.should raise_error(Capybara::NotSupportedByDriverError)
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
shared_examples_for "driver with frame support" do
|
196
|
-
describe '#within_frame' do
|
197
|
-
before(:each) do
|
198
|
-
@driver.visit('/within_frames')
|
199
|
-
end
|
200
|
-
|
201
|
-
it "should find the div in frameOne" do
|
202
|
-
@driver.within_frame("frameOne") do
|
203
|
-
@driver.find("//*[@id='divInFrameOne']")[0].text.should eql 'This is the text of divInFrameOne'
|
204
|
-
end
|
205
|
-
end
|
206
|
-
it "should find the div in FrameTwo" do
|
207
|
-
@driver.within_frame("frameTwo") do
|
208
|
-
@driver.find("//*[@id='divInFrameTwo']")[0].text.should eql 'This is the text of divInFrameTwo'
|
209
|
-
end
|
210
|
-
end
|
211
|
-
it "should find the text div in the main window after finding text in frameOne" do
|
212
|
-
@driver.within_frame("frameOne") do
|
213
|
-
@driver.find("//*[@id='divInFrameOne']")[0].text.should eql 'This is the text of divInFrameOne'
|
214
|
-
end
|
215
|
-
@driver.find("//*[@id='divInMainWindow']")[0].text.should eql 'This is the text for divInMainWindow'
|
216
|
-
end
|
217
|
-
it "should find the text div in the main window after finding text in frameTwo" do
|
218
|
-
@driver.within_frame("frameTwo") do
|
219
|
-
@driver.find("//*[@id='divInFrameTwo']")[0].text.should eql 'This is the text of divInFrameTwo'
|
220
|
-
end
|
221
|
-
@driver.find("//*[@id='divInMainWindow']")[0].text.should eql 'This is the text for divInMainWindow'
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
shared_examples_for "driver with support for window switching" do
|
227
|
-
describe '#within_window' do
|
228
|
-
before(:each) do
|
229
|
-
@driver.visit('/within_popups')
|
230
|
-
end
|
231
|
-
after(:each) do
|
232
|
-
@driver.within_window("firstPopup") do
|
233
|
-
@driver.evaluate_script('window.close()')
|
234
|
-
end
|
235
|
-
@driver.within_window("secondPopup") do
|
236
|
-
@driver.evaluate_script('window.close()')
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
it "should find the div in firstPopup" do
|
241
|
-
@driver.within_window("firstPopup") do
|
242
|
-
@driver.find("//*[@id='divInPopupOne']")[0].text.should eql 'This is the text of divInPopupOne'
|
243
|
-
end
|
244
|
-
end
|
245
|
-
it "should find the div in secondPopup" do
|
246
|
-
@driver.within_window("secondPopup") do
|
247
|
-
@driver.find("//*[@id='divInPopupTwo']")[0].text.should eql 'This is the text of divInPopupTwo'
|
248
|
-
end
|
249
|
-
end
|
250
|
-
it "should find the divs in both popups" do
|
251
|
-
@driver.within_window("secondPopup") do
|
252
|
-
@driver.find("//*[@id='divInPopupTwo']")[0].text.should eql 'This is the text of divInPopupTwo'
|
253
|
-
end
|
254
|
-
@driver.within_window("firstPopup") do
|
255
|
-
@driver.find("//*[@id='divInPopupOne']")[0].text.should eql 'This is the text of divInPopupOne'
|
256
|
-
end
|
257
|
-
end
|
258
|
-
it "should find the div in the main window after finding a div in a popup" do
|
259
|
-
@driver.within_window("secondPopup") do
|
260
|
-
@driver.find("//*[@id='divInPopupTwo']")[0].text.should eql 'This is the text of divInPopupTwo'
|
261
|
-
end
|
262
|
-
@driver.find("//*[@id='divInMainWindow']")[0].text.should eql 'This is the text for divInMainWindow'
|
263
|
-
end
|
264
|
-
end
|
265
|
-
end
|
266
|
-
|
267
|
-
shared_examples_for "driver with cookies support" do
|
268
|
-
describe "#reset!" do
|
269
|
-
it "should set and clean cookies" do
|
270
|
-
@driver.visit('/get_cookie')
|
271
|
-
@driver.body.should_not include('test_cookie')
|
272
|
-
|
273
|
-
@driver.visit('/set_cookie')
|
274
|
-
@driver.body.should include('Cookie set to test_cookie')
|
275
|
-
|
276
|
-
@driver.visit('/get_cookie')
|
277
|
-
@driver.body.should include('test_cookie')
|
278
|
-
|
279
|
-
@driver.reset!
|
280
|
-
@driver.visit('/get_cookie')
|
281
|
-
@driver.body.should_not include('test_cookie')
|
282
|
-
end
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
shared_examples_for "driver with infinite redirect detection" do
|
287
|
-
it "should follow 5 redirects" do
|
288
|
-
@driver.visit('/redirect/5/times')
|
289
|
-
@driver.body.should include('redirection complete')
|
290
|
-
end
|
291
|
-
|
292
|
-
it "should not follow more than 5 redirects" do
|
293
|
-
running do
|
294
|
-
@driver.visit('/redirect/6/times')
|
295
|
-
end.should raise_error(Capybara::InfiniteRedirectError)
|
296
|
-
end
|
297
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
ThisIsTheTestFile
|
data/test_app/public/test.js
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
var activeRequests = 0;
|
2
|
-
$(function() {
|
3
|
-
$('#change').text('I changed it');
|
4
|
-
$('#drag').draggable();
|
5
|
-
$('#drop').droppable({
|
6
|
-
drop: function(event, ui) {
|
7
|
-
ui.draggable.remove();
|
8
|
-
$(this).html('Dropped!');
|
9
|
-
}
|
10
|
-
});
|
11
|
-
$('#clickable').click(function() {
|
12
|
-
var link = $(this);
|
13
|
-
setTimeout(function() {
|
14
|
-
$(link).after('<a id="has-been-clicked" href="#">Has been clicked</a>');
|
15
|
-
$(link).after('<input type="submit" value="New Here">');
|
16
|
-
$(link).after('<input type="text" id="new_field">');
|
17
|
-
$('#change').remove();
|
18
|
-
}, 500);
|
19
|
-
return false;
|
20
|
-
});
|
21
|
-
$('#waiter').change(function() {
|
22
|
-
activeRequests = 1;
|
23
|
-
setTimeout(function() {
|
24
|
-
activeRequests = 0;
|
25
|
-
}, 500);
|
26
|
-
});
|
27
|
-
$('#with_focus_event').focus(function() {
|
28
|
-
$('body').append('<p id="focus_event_triggered">Focus Event triggered</p>');
|
29
|
-
});
|
30
|
-
$('#checkbox_with_event').click(function() {
|
31
|
-
$('body').append('<p id="checkbox_event_triggered">Checkbox event triggered</p>');
|
32
|
-
});
|
33
|
-
$('#fire_ajax_request').click(function() {
|
34
|
-
$.ajax({url: "/slow_response", context: document.body, success: function() {
|
35
|
-
$('body').append('<p id="ajax_request_done">Ajax request done</p>');
|
36
|
-
}});
|
37
|
-
});
|
38
|
-
$('#reload-link').click(function() {
|
39
|
-
setTimeout(function() {
|
40
|
-
$('#reload-me').replaceWith('<div id="reload-me"><em><a>RELOADED</a></em></div>');
|
41
|
-
}, 250)
|
42
|
-
});
|
43
|
-
});
|
data/test_app/session.rb
DELETED
@@ -1,154 +0,0 @@
|
|
1
|
-
require 'capybara/spec/test_app'
|
2
|
-
require 'nokogiri'
|
3
|
-
|
4
|
-
Dir[File.dirname(__FILE__)+'/session/*'].each { |group| require group }
|
5
|
-
|
6
|
-
shared_examples_for "session" do
|
7
|
-
def extract_results(session)
|
8
|
-
YAML.load Nokogiri::HTML(session.body).xpath("//pre[@id='results']").first.text
|
9
|
-
end
|
10
|
-
|
11
|
-
after do
|
12
|
-
@session.reset_session!
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#visit' do
|
16
|
-
it "should fetch a response from the driver" do
|
17
|
-
@session.visit('/')
|
18
|
-
@session.body.should include('Hello world!')
|
19
|
-
@session.visit('/foo')
|
20
|
-
@session.body.should include('Another World')
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#body' do
|
25
|
-
it "should return the unmodified page body" do
|
26
|
-
@session.visit('/')
|
27
|
-
@session.body.should include('Hello world!')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#html' do
|
32
|
-
it "should return the unmodified page body" do
|
33
|
-
# html and body should be aliased, but we can't just check for
|
34
|
-
# method(:html) == method(:body) because these shared examples get run
|
35
|
-
# against the DSL, which uses forwarding methods. So we test behavior.
|
36
|
-
@session.visit('/')
|
37
|
-
@session.body.should include('Hello world!')
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe '#source' do
|
42
|
-
it "should return the unmodified page source" do
|
43
|
-
@session.visit('/')
|
44
|
-
@session.source.should include('Hello world!')
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe '#reset_session!' do
|
49
|
-
it "removes cookies" do
|
50
|
-
@session.visit('/set_cookie')
|
51
|
-
@session.visit('/get_cookie')
|
52
|
-
@session.body.should include('test_cookie')
|
53
|
-
|
54
|
-
@session.reset_session!
|
55
|
-
@session.visit('/get_cookie')
|
56
|
-
@session.body.should_not include('test_cookie')
|
57
|
-
end
|
58
|
-
|
59
|
-
it "resets current host" do
|
60
|
-
@session.visit('http://capybara-testapp.heroku.com')
|
61
|
-
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
62
|
-
|
63
|
-
@session.reset_session!
|
64
|
-
@session.current_host.should be_nil
|
65
|
-
end
|
66
|
-
|
67
|
-
it "resets current path" do
|
68
|
-
@session.visit('/with_html')
|
69
|
-
@session.current_path.should == '/with_html'
|
70
|
-
|
71
|
-
@session.reset_session!
|
72
|
-
@session.current_path.should be_nil
|
73
|
-
end
|
74
|
-
|
75
|
-
it "resets page body" do
|
76
|
-
@session.visit('/with_html')
|
77
|
-
@session.body.should include('This is a test')
|
78
|
-
@session.find('.//h1').text.should include('This is a test')
|
79
|
-
|
80
|
-
@session.reset_session!
|
81
|
-
@session.body.should_not include('This is a test')
|
82
|
-
@session.should have_no_selector('.//h1')
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
it_should_behave_like "all"
|
87
|
-
it_should_behave_like "first"
|
88
|
-
it_should_behave_like "attach_file"
|
89
|
-
it_should_behave_like "check"
|
90
|
-
it_should_behave_like "choose"
|
91
|
-
it_should_behave_like "click_link_or_button"
|
92
|
-
it_should_behave_like "click_button"
|
93
|
-
it_should_behave_like "click_link"
|
94
|
-
it_should_behave_like "fill_in"
|
95
|
-
it_should_behave_like "find_button"
|
96
|
-
it_should_behave_like "find_field"
|
97
|
-
it_should_behave_like "find_link"
|
98
|
-
it_should_behave_like "find_by_id"
|
99
|
-
it_should_behave_like "find"
|
100
|
-
it_should_behave_like "has_content"
|
101
|
-
it_should_behave_like "has_css"
|
102
|
-
it_should_behave_like "has_css"
|
103
|
-
it_should_behave_like "has_selector"
|
104
|
-
it_should_behave_like "has_xpath"
|
105
|
-
it_should_behave_like "has_link"
|
106
|
-
it_should_behave_like "has_button"
|
107
|
-
it_should_behave_like "has_field"
|
108
|
-
it_should_behave_like "has_select"
|
109
|
-
it_should_behave_like "has_table"
|
110
|
-
it_should_behave_like "select"
|
111
|
-
it_should_behave_like "text"
|
112
|
-
it_should_behave_like "uncheck"
|
113
|
-
it_should_behave_like "unselect"
|
114
|
-
it_should_behave_like "within"
|
115
|
-
it_should_behave_like "current_url"
|
116
|
-
it_should_behave_like "current_host"
|
117
|
-
|
118
|
-
it "should encode complex field names, like array[][value]" do
|
119
|
-
@session.visit('/form')
|
120
|
-
@session.fill_in('address1_city', :with =>'Paris')
|
121
|
-
@session.fill_in('address1_street', :with =>'CDG')
|
122
|
-
@session.fill_in('address1_street', :with =>'CDG')
|
123
|
-
@session.select("France", :from => 'address1_country')
|
124
|
-
|
125
|
-
@session.fill_in('address2_city', :with => 'Mikolaiv')
|
126
|
-
@session.fill_in('address2_street', :with => 'PGS')
|
127
|
-
@session.select("Ukraine", :from => 'address2_country')
|
128
|
-
|
129
|
-
@session.click_button "awesome"
|
130
|
-
|
131
|
-
addresses=extract_results(@session)["addresses"]
|
132
|
-
addresses.should have(2).addresses
|
133
|
-
|
134
|
-
addresses[0]["street"].should == 'CDG'
|
135
|
-
addresses[0]["city"].should == 'Paris'
|
136
|
-
addresses[0]["country"].should == 'France'
|
137
|
-
|
138
|
-
addresses[1]["street"].should == 'PGS'
|
139
|
-
addresses[1]["city"].should == 'Mikolaiv'
|
140
|
-
addresses[1]["country"].should == 'Ukraine'
|
141
|
-
end
|
142
|
-
|
143
|
-
end
|
144
|
-
|
145
|
-
|
146
|
-
describe Capybara::Session do
|
147
|
-
context 'with non-existant driver' do
|
148
|
-
it "should raise an error" do
|
149
|
-
running {
|
150
|
-
Capybara::Session.new(:quox, TestApp).driver
|
151
|
-
}.should raise_error(Capybara::DriverNotFoundError)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|