capybara 2.0.3 → 2.1.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -1,9 +1,14 @@
|
|
1
1
|
class Capybara::Selenium::Node < Capybara::Driver::Node
|
2
|
-
def
|
2
|
+
def visible_text
|
3
3
|
# Selenium doesn't normalize Unicode whitespace.
|
4
4
|
Capybara::Helpers.normalize_whitespace(native.text)
|
5
5
|
end
|
6
6
|
|
7
|
+
def all_text
|
8
|
+
text = driver.browser.execute_script("return arguments[0].textContent", native)
|
9
|
+
Capybara::Helpers.normalize_whitespace(text)
|
10
|
+
end
|
11
|
+
|
7
12
|
def [](name)
|
8
13
|
native.attribute(name.to_s)
|
9
14
|
rescue Selenium::WebDriver::Error::WebDriverError
|
@@ -32,7 +37,8 @@ class Capybara::Selenium::Node < Capybara::Driver::Node
|
|
32
37
|
path_names = value.to_s.empty? ? [] : value
|
33
38
|
native.send_keys(*path_names)
|
34
39
|
elsif tag_name == 'textarea' or tag_name == 'input'
|
35
|
-
|
40
|
+
#script can change a readonly element which user input cannot, so dont execute if readonly
|
41
|
+
driver.browser.execute_script "arguments[0].value = ''", native unless self[:readonly]
|
36
42
|
native.send_keys(value.to_s)
|
37
43
|
end
|
38
44
|
end
|
@@ -52,6 +58,10 @@ class Capybara::Selenium::Node < Capybara::Driver::Node
|
|
52
58
|
native.click
|
53
59
|
end
|
54
60
|
|
61
|
+
def hover
|
62
|
+
driver.browser.action.move_to(native).perform
|
63
|
+
end
|
64
|
+
|
55
65
|
def drag_to(element)
|
56
66
|
driver.browser.action.drag_and_drop(native, element.native).perform
|
57
67
|
end
|
@@ -70,12 +80,20 @@ class Capybara::Selenium::Node < Capybara::Driver::Node
|
|
70
80
|
selected and selected != "false"
|
71
81
|
end
|
72
82
|
|
83
|
+
def disabled?
|
84
|
+
!native.enabled?
|
85
|
+
end
|
86
|
+
|
73
87
|
alias :checked? :selected?
|
74
88
|
|
75
|
-
def
|
89
|
+
def find_xpath(locator)
|
76
90
|
native.find_elements(:xpath, locator).map { |n| self.class.new(driver, n) }
|
77
91
|
end
|
78
|
-
|
92
|
+
|
93
|
+
def find_css(locator)
|
94
|
+
native.find_elements(:css, locator).map { |n| self.class.new(driver, n) }
|
95
|
+
end
|
96
|
+
|
79
97
|
def ==(other)
|
80
98
|
native == other.native
|
81
99
|
end
|
@@ -84,6 +102,6 @@ private
|
|
84
102
|
|
85
103
|
# a reference to the select node if this is an option node
|
86
104
|
def select_node
|
87
|
-
|
105
|
+
find_xpath('./ancestor::select').first
|
88
106
|
end
|
89
107
|
end
|
data/lib/capybara/session.rb
CHANGED
@@ -40,11 +40,13 @@ module Capybara
|
|
40
40
|
:body, :html, :current_url, :current_host, :evaluate_script, :source,
|
41
41
|
:visit, :within, :within_fieldset, :within_table, :within_frame,
|
42
42
|
:within_window, :current_path, :save_page, :save_and_open_page,
|
43
|
-
:save_screenshot, :reset_session!, :response_headers, :status_code
|
43
|
+
:save_screenshot, :reset_session!, :response_headers, :status_code,
|
44
|
+
:title, :has_title?, :has_no_title?, :current_scope
|
44
45
|
]
|
45
46
|
DSL_METHODS = NODE_METHODS + SESSION_METHODS
|
46
47
|
|
47
48
|
attr_reader :mode, :app, :server
|
49
|
+
attr_accessor :synchronized
|
48
50
|
|
49
51
|
def initialize(mode, app=nil)
|
50
52
|
@mode = mode
|
@@ -74,7 +76,7 @@ module Capybara
|
|
74
76
|
def reset!
|
75
77
|
driver.reset! if @touched
|
76
78
|
@touched = false
|
77
|
-
raise @server.error if @server and @server.error
|
79
|
+
raise @server.error if Capybara.raise_server_errors and @server and @server.error
|
78
80
|
ensure
|
79
81
|
@server.reset_error! if @server
|
80
82
|
end
|
@@ -137,6 +139,14 @@ module Capybara
|
|
137
139
|
driver.current_url
|
138
140
|
end
|
139
141
|
|
142
|
+
##
|
143
|
+
#
|
144
|
+
# @return [String] Title of the current page
|
145
|
+
#
|
146
|
+
def title
|
147
|
+
driver.title
|
148
|
+
end
|
149
|
+
|
140
150
|
##
|
141
151
|
#
|
142
152
|
# Navigate to the given URL. The URL can either be a relative URL or an absolute URL
|
@@ -243,13 +253,16 @@ module Capybara
|
|
243
253
|
|
244
254
|
##
|
245
255
|
#
|
246
|
-
# Execute the given block within the given iframe given
|
247
|
-
#
|
256
|
+
# Execute the given block within the given iframe using given frame name or index.
|
257
|
+
# May be supported by not all drivers. Drivers that support it, may provide additional options.
|
248
258
|
#
|
249
|
-
# @
|
259
|
+
# @overload within_frame(index)
|
260
|
+
# @param [Integer] index index of a frame
|
261
|
+
# @overload within_frame(name)
|
262
|
+
# @param [String] name name of a frame
|
250
263
|
#
|
251
|
-
def within_frame(
|
252
|
-
driver.within_frame(
|
264
|
+
def within_frame(frame_handle)
|
265
|
+
driver.within_frame(frame_handle) do
|
253
266
|
yield
|
254
267
|
end
|
255
268
|
end
|
@@ -304,7 +317,7 @@ module Capybara
|
|
304
317
|
|
305
318
|
FileUtils.mkdir_p(File.dirname(path))
|
306
319
|
|
307
|
-
File.open(path,'w') { |f| f.write(body) }
|
320
|
+
File.open(path,'w') { |f| f.write(Capybara::Helpers.inject_asset_host(body)) }
|
308
321
|
path
|
309
322
|
end
|
310
323
|
|
@@ -338,7 +351,7 @@ module Capybara
|
|
338
351
|
NODE_METHODS.each do |method|
|
339
352
|
define_method method do |*args, &block|
|
340
353
|
@touched = true
|
341
|
-
|
354
|
+
current_scope.send(method, *args, &block)
|
342
355
|
end
|
343
356
|
end
|
344
357
|
|
@@ -346,12 +359,34 @@ module Capybara
|
|
346
359
|
%(#<Capybara::Session>)
|
347
360
|
end
|
348
361
|
|
349
|
-
|
362
|
+
def has_title?(content)
|
363
|
+
document.synchronize do
|
364
|
+
unless title.match(Capybara::Helpers.to_regexp(content))
|
365
|
+
raise ExpectationNotMet
|
366
|
+
end
|
367
|
+
end
|
368
|
+
return true
|
369
|
+
rescue Capybara::ExpectationNotMet
|
370
|
+
return false
|
371
|
+
end
|
372
|
+
|
373
|
+
def has_no_title?(content)
|
374
|
+
document.synchronize do
|
375
|
+
if title.match(Capybara::Helpers.to_regexp(content))
|
376
|
+
raise ExpectationNotMet
|
377
|
+
end
|
378
|
+
end
|
379
|
+
return true
|
380
|
+
rescue Capybara::ExpectationNotMet
|
381
|
+
return false
|
382
|
+
end
|
350
383
|
|
351
|
-
def
|
384
|
+
def current_scope
|
352
385
|
scopes.last
|
353
386
|
end
|
354
387
|
|
388
|
+
private
|
389
|
+
|
355
390
|
def scopes
|
356
391
|
@scopes ||= [document]
|
357
392
|
end
|
@@ -18,6 +18,13 @@ $(function() {
|
|
18
18
|
}, 500);
|
19
19
|
return false;
|
20
20
|
});
|
21
|
+
$('#slow-click').click(function() {
|
22
|
+
var link = $(this);
|
23
|
+
setTimeout(function() {
|
24
|
+
$(link).after('<a id="slow-clicked" href="#">Slow link clicked</a>');
|
25
|
+
}, 4000);
|
26
|
+
return false;
|
27
|
+
});
|
21
28
|
$('#waiter').change(function() {
|
22
29
|
activeRequests = 1;
|
23
30
|
setTimeout(function() {
|
@@ -48,4 +55,9 @@ $(function() {
|
|
48
55
|
$('#the-list').html('<li>Foo</li><li>Bar</li>');
|
49
56
|
}, 250)
|
50
57
|
});
|
58
|
+
$('#change-title').click(function() {
|
59
|
+
setTimeout(function() {
|
60
|
+
$('title').text('changed title')
|
61
|
+
}, 250)
|
62
|
+
});
|
51
63
|
});
|
@@ -48,22 +48,23 @@ Capybara::SpecHelper.spec "#all" do
|
|
48
48
|
@session.all('h1').first.text.should == 'This is a test'
|
49
49
|
@session.all("input[id='test_field']").first[:value].should == 'monkey'
|
50
50
|
end
|
51
|
-
after { Capybara.default_selector = :xpath }
|
52
51
|
end
|
53
52
|
|
54
53
|
context "with visible filter" do
|
55
|
-
|
56
|
-
it "should only find visible nodes" do
|
57
|
-
@session.all(:css, "a.simple").should have(2).elements
|
54
|
+
it "should only find visible nodes when true" do
|
58
55
|
@session.all(:css, "a.simple", :visible => true).should have(1).elements
|
59
|
-
Capybara.ignore_hidden_elements = true
|
60
|
-
@session.all(:css, "a.simple").should have(1).elements
|
61
56
|
end
|
62
57
|
|
63
|
-
it "should
|
64
|
-
Capybara.ignore_hidden_elements = true
|
58
|
+
it "should find nodes regardless of whether they are invisible when false" do
|
65
59
|
@session.all(:css, "a.simple", :visible => false).should have(2).elements
|
66
60
|
end
|
61
|
+
|
62
|
+
it "should default to Capybara.ignore_hidden_elements" do
|
63
|
+
Capybara.ignore_hidden_elements = true
|
64
|
+
@session.all(:css, "a.simple").should have(1).elements
|
65
|
+
Capybara.ignore_hidden_elements = false
|
66
|
+
@session.all(:css, "a.simple").should have(2).elements
|
67
|
+
end
|
67
68
|
end
|
68
69
|
|
69
70
|
context "within a scope" do
|
@@ -87,4 +87,18 @@ Capybara::SpecHelper.spec "#attach_file" do
|
|
87
87
|
expect { @session.attach_file('Image', '/no_such_file.png') }.to raise_error(Capybara::FileNotFound)
|
88
88
|
end
|
89
89
|
end
|
90
|
+
|
91
|
+
context "with :exact option" do
|
92
|
+
it "should set a file path by partial label when false" do
|
93
|
+
@session.attach_file "Imag", __FILE__, :exact => false
|
94
|
+
@session.click_button('awesome')
|
95
|
+
extract_results(@session)['image'].should == File.basename(__FILE__)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "not allow partial matches when true" do
|
99
|
+
expect do
|
100
|
+
@session.attach_file "Imag", __FILE__, :exact => true
|
101
|
+
end.to raise_error(Capybara::ElementNotFound)
|
102
|
+
end
|
103
|
+
end
|
90
104
|
end
|
@@ -82,4 +82,18 @@ Capybara::SpecHelper.spec "#check" do
|
|
82
82
|
end.to raise_error(Capybara::ElementNotFound)
|
83
83
|
end
|
84
84
|
end
|
85
|
+
|
86
|
+
context "with :exact option" do
|
87
|
+
it "should accept partial matches when false" do
|
88
|
+
@session.check('Ham', :exact => false)
|
89
|
+
@session.click_button('awesome')
|
90
|
+
extract_results(@session)['pets'].should include('hamster')
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should not accept partial matches when true" do
|
94
|
+
expect do
|
95
|
+
@session.check('Ham', :exact => true)
|
96
|
+
end.to raise_error(Capybara::ElementNotFound)
|
97
|
+
end
|
98
|
+
end
|
85
99
|
end
|
@@ -37,4 +37,18 @@ Capybara::SpecHelper.spec "#choose" do
|
|
37
37
|
end.to raise_error(Capybara::ElementNotFound)
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
context "with :exact option" do
|
42
|
+
it "should accept partial matches when false" do
|
43
|
+
@session.choose("Mal", :exact => false)
|
44
|
+
@session.click_button('awesome')
|
45
|
+
extract_results(@session)['gender'].should == 'male'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should not accept partial matches when true" do
|
49
|
+
expect do
|
50
|
+
@session.choose("Mal", :exact => true)
|
51
|
+
end.to raise_error(Capybara::ElementNotFound)
|
52
|
+
end
|
53
|
+
end
|
40
54
|
end
|
@@ -63,7 +63,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should serialise and submit color fields" do
|
66
|
-
@results['html5_color'].should == '#FFFFFF'
|
66
|
+
@results['html5_color'].upcase.should == '#FFFFFF'
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -162,6 +162,69 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
|
+
context "with fields associated with the form using the form attribute" do
|
166
|
+
before do
|
167
|
+
@session.click_button('submit_form1')
|
168
|
+
@results = extract_results(@session)
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should serialize and submit text fields" do
|
172
|
+
@results['outside_input'].should == 'outside_input'
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should serialize text areas" do
|
176
|
+
@results['outside_textarea'].should == 'Some text here'
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should serialize select tags" do
|
180
|
+
@results['outside_select'].should == 'Ruby'
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should not serliaze fields associated with a different form" do
|
184
|
+
@results['for_form2'].should be_nil
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
|
189
|
+
context "with submit button outside the form defined by <button> tag" do
|
190
|
+
before do
|
191
|
+
@session.click_button('outside_button')
|
192
|
+
@results = extract_results(@session)
|
193
|
+
end
|
194
|
+
|
195
|
+
it "should submit the associated form" do
|
196
|
+
@results['which_form'].should == 'form2'
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should submit the button that was clicked, but not other buttons" do
|
200
|
+
@results['outside_button'].should == 'outside_button'
|
201
|
+
@results['unused'].should be_nil
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
context "with submit button outside the form defined by <input type='submit'> tag" do
|
206
|
+
before do
|
207
|
+
@session.click_button('outside_submit')
|
208
|
+
@results = extract_results(@session)
|
209
|
+
end
|
210
|
+
|
211
|
+
it "should submit the associated form" do
|
212
|
+
@results['which_form'].should == 'form1'
|
213
|
+
end
|
214
|
+
|
215
|
+
it "should submit the button that was clicked, but not other buttons" do
|
216
|
+
@results['outside_submit'].should == 'outside_submit'
|
217
|
+
@results['submit_form1'].should be_nil
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
context "with submit button for form1 located within form2" do
|
222
|
+
it "should submit the form associated with the button" do
|
223
|
+
@session.click_button('other_form_button')
|
224
|
+
extract_results(@session)['which_form'].should == "form1"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
165
228
|
context "with alt given on an image button" do
|
166
229
|
it "should submit the associated form" do
|
167
230
|
@session.click_button('oh hai thar')
|
@@ -332,4 +395,17 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
332
395
|
addresses[1]["city"].should == 'Mikolaiv'
|
333
396
|
addresses[1]["country"].should == 'Ukraine'
|
334
397
|
end
|
398
|
+
|
399
|
+
context "with :exact option" do
|
400
|
+
it "should accept partial matches when false" do
|
401
|
+
@session.click_button('What an Awesome', :exact => false)
|
402
|
+
extract_results(@session)['first_name'].should == 'John'
|
403
|
+
end
|
404
|
+
|
405
|
+
it "should not accept partial matches when true" do
|
406
|
+
expect do
|
407
|
+
@session.click_button('What an Awesome', :exact => true)
|
408
|
+
end.to raise_error(Capybara::ElementNotFound)
|
409
|
+
end
|
410
|
+
end
|
335
411
|
end
|
@@ -35,6 +35,41 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
35
35
|
extract_results(@session)['first_name'].should == 'John'
|
36
36
|
end
|
37
37
|
|
38
|
+
context "with :exact option" do
|
39
|
+
context "when `true`" do
|
40
|
+
it "clicks on approximately matching link" do
|
41
|
+
@session.visit('/with_html')
|
42
|
+
@session.click_link_or_button('abore', :exact => false)
|
43
|
+
@session.should have_content('Bar')
|
44
|
+
end
|
45
|
+
|
46
|
+
it "clicks on approximately matching button" do
|
47
|
+
@session.visit('/form')
|
48
|
+
@session.click_link_or_button('awe')
|
49
|
+
extract_results(@session)['first_name'].should == 'John'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when `false`" do
|
54
|
+
it "does not click on link which matches approximately" do
|
55
|
+
@session.visit('/with_html')
|
56
|
+
msg = "Unable to find link or button \"abore\""
|
57
|
+
expect do
|
58
|
+
@session.click_link_or_button('abore', :exact => true)
|
59
|
+
end.to raise_error(Capybara::ElementNotFound, msg)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "does not click on approximately matching button" do
|
63
|
+
@session.visit('/form')
|
64
|
+
msg = "Unable to find link or button \"awe\""
|
65
|
+
|
66
|
+
expect do
|
67
|
+
@session.click_link_or_button('awe', :exact => true)
|
68
|
+
end.to raise_error(Capybara::ElementNotFound, msg)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
38
73
|
context "with a locator that doesn't exist" do
|
39
74
|
it "should raise an error" do
|
40
75
|
@session.visit('/with_html')
|
@@ -44,4 +79,34 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
44
79
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
45
80
|
end
|
46
81
|
end
|
82
|
+
|
83
|
+
context "with :disabled option" do
|
84
|
+
it "ignores disabled buttons when false" do
|
85
|
+
@session.visit('/form')
|
86
|
+
expect do
|
87
|
+
@session.click_link_or_button('Disabled button', :disabled => false)
|
88
|
+
end.to raise_error(Capybara::ElementNotFound)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "ignores disabled buttons by default" do
|
92
|
+
@session.visit('/form')
|
93
|
+
expect do
|
94
|
+
@session.click_link_or_button('Disabled button')
|
95
|
+
end.to raise_error(Capybara::ElementNotFound)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "happily clicks on links which incorrectly have the disabled attribute" do
|
99
|
+
@session.visit('/with_html')
|
100
|
+
@session.click_link_or_button('Disabled link')
|
101
|
+
@session.should have_content("Bar")
|
102
|
+
end
|
103
|
+
|
104
|
+
it "does nothing when button is disabled" do
|
105
|
+
@session.visit('/form')
|
106
|
+
expect do
|
107
|
+
@session.click_link_or_button('Disabled button', :disabled => false)
|
108
|
+
end.to raise_error(Capybara::ElementNotFound)
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
47
112
|
end
|