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 @@ +