diff --git a/lib/capybara/driver/rack_test_driver.rb b/lib/capybara/driver/rack_test_driver.rb
index 3dc9acc0..e4c4a7be 100644
--- a/lib/capybara/driver/rack_test_driver.rb
+++ b/lib/capybara/driver/rack_test_driver.rb
@@ -106,7 +106,7 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base
class Form < Node
def params(button)
params = {}
-
+
text_fields = %w[text hidden password url color tel email search].map{|f| "@type='#{f}'"}.join(' or ')
node.xpath(".//input[#{text_fields}]").map do |input|
@@ -141,7 +141,7 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base
end
end
end
- merge_param!(params, button[:name], button[:value]) if button[:name]
+ merge_param!(params, button[:name], button[:value] || "") if button[:name]
params
end
@@ -154,7 +154,7 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base
end
private
-
+
def method
self[:method] =~ /post/i ? :post : :get
end
@@ -200,7 +200,7 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base
end
def submit(method, path, attributes)
- path = current_path if not path or path.empty?
+ path = current_path if not path or path.empty?
send(method, path, attributes, env)
follow_redirects!
cache_body
diff --git a/spec/dsl/click_button_spec.rb b/spec/dsl/click_button_spec.rb
index 59efe3c7..bb317294 100644
--- a/spec/dsl/click_button_spec.rb
+++ b/spec/dsl/click_button_spec.rb
@@ -13,33 +13,33 @@ shared_examples_for "click_button" do
end
context "with value given on a submit button" do
- context "on a form with HTML5 fields" do
+ context "on a form with HTML5 fields" do
before do
@session.click_button('html5_submit')
@results = extract_results(@session)
end
-
+
it "should serialise and submit search fields" do
@results['html5_search'].should == 'what are you looking for'
end
-
+
it "should serialise and submit email fields" do
@results['html5_email'].should == 'person@email.com'
end
-
+
it "should serialise and submit url fields" do
@results['html5_url'].should == 'http://www.example.com'
end
-
+
it "should serialise and submit tel fields" do
@results['html5_tel'].should == '911'
end
-
+
it "should serialise and submit color fields" do
@results['html5_color'].should == '#FFF'
- end
+ end
end
-
+
context "on an HTML4 form" do
before do
@session.click_button('awesome')
@@ -187,7 +187,7 @@ shared_examples_for "click_button" do
@session.click_button('ck_me')
extract_results(@session)['first_name'].should == 'John'
end
-
+
it "should prefer exact matches over partial matches" do
@session.click_button('Just a button')
extract_results(@session)['button'].should == 'Just a button'
@@ -202,6 +202,12 @@ shared_examples_for "click_button" do
end
end
+ it "should serialize and send valueless buttons that were clicked" do
+ @session.click_button('No Value!')
+ @results = extract_results(@session)
+ @results['no_value'].should_not be_nil
+ end
+
it "should serialize and send GET forms" do
@session.visit('/form')
@session.click_button('med')
@@ -214,13 +220,13 @@ shared_examples_for "click_button" do
@session.click_button('Go FAR')
@session.body.should include('You landed')
end
-
+
it "should post pack to the same URL when no action given" do
@session.visit('/postback')
@session.click_button('With no action')
@session.body.should include('Postback')
end
-
+
it "should post pack to the same URL when blank action given" do
@session.visit('/postback')
@session.click_button('With blank action')
diff --git a/spec/views/form.erb b/spec/views/form.erb
index 32d926ac..5c438c5c 100644
--- a/spec/views/form.erb
+++ b/spec/views/form.erb
@@ -153,6 +153,7 @@
+