diff --git a/lib/capybara/rack_test/form.rb b/lib/capybara/rack_test/form.rb index ecd02f6f..70c3f0f1 100644 --- a/lib/capybara/rack_test/form.rb +++ b/lib/capybara/rack_test/form.rb @@ -16,8 +16,9 @@ class Capybara::RackTest::Form < Capybara::RackTest::Node def params(button) params = {} - - native.xpath("(.//input|.//select|.//textarea)[not(@disabled)]").map do |field| + element_query="((.//input|.//select|.//textarea)[not(@form)])" + element_query+="|((//input|//select|//textarea)[@form='#{native[:id]}'])" if native[:id] + native.xpath("(#{element_query})[not(@disabled)]").map do |field| case field.name when 'input' if %w(radio checkbox).include? field['type'] diff --git a/lib/capybara/spec/session/click_button_spec.rb b/lib/capybara/spec/session/click_button_spec.rb index f374560b..90c09a90 100644 --- a/lib/capybara/spec/session/click_button_spec.rb +++ b/lib/capybara/spec/session/click_button_spec.rb @@ -162,6 +162,30 @@ Capybara::SpecHelper.spec '#click_button' do end end + context "with fields associated with the form using the form attribute" do + before do + @session.click_button('submit_form1') + @results = extract_results(@session) + end + + it "should serialize and submit text fields" do + @results['outside_input'].should == 'outside_input' + end + + it "should serialize text areas" do + @results['outside_textarea'].should == 'Some text here' + end + + it "should serialize select tags" do + @results['outside_select'].should == 'Ruby' + end + + it "should not serliaze fields associated with a different form" do + @results['for_form2'].should be_nil + end + end + + context "with submit button outside the form defined by + + +