diff --git a/lib/capybara/rack_test/node.rb b/lib/capybara/rack_test/node.rb index 658797c89..361041a7b 100644 --- a/lib/capybara/rack_test/node.rb +++ b/lib/capybara/rack_test/node.rb @@ -225,7 +225,7 @@ def set_input(value) # rubocop:disable Naming/AccessorMethodName native.remove else value.to_s.tap do |set_value| - if set_value.end_with?("\n") && form&.css('input, textarea')&.count + if set_value.end_with?("\n") && form&.css('input, textarea')&.count == 1 native['value'] = set_value.to_s.chop Capybara::RackTest::Form.new(driver, form).submit(self) else diff --git a/lib/capybara/spec/session/node_spec.rb b/lib/capybara/spec/session/node_spec.rb index cc79f953b..2b71fe15b 100644 --- a/lib/capybara/spec/session/node_spec.rb +++ b/lib/capybara/spec/session/node_spec.rb @@ -163,6 +163,12 @@ @session.find(:css, '#single_input').set("my entry\n") expect(extract_results(@session)['single_input']).to eq('my entry') end + + it 'should not submit single text input forms if ended with \n and has multiple values' do + @session.visit('/form') + @session.find(:css, '#two_input_1').set("my entry\n") + expect(@session.find(:css, '#two_input_1').value).to eq("my entry\n") + end end describe '#tag_name' do diff --git a/lib/capybara/spec/views/form.erb b/lib/capybara/spec/views/form.erb index 4d9439e26..650366bf1 100644 --- a/lib/capybara/spec/views/form.erb +++ b/lib/capybara/spec/views/form.erb @@ -699,6 +699,11 @@ New line after and before textarea tag +
+ + +
+