diff --git a/CHANGELOG.md b/CHANGELOG.md index d2ccddc..3d7b3a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ ### Fixed - Ensure node has focus before setting value [#280] - Raise `ObsoleteNode` instead of silently acting on a node that got disconnected from the DOM between being found and being used [#239] +- `Capybara::Cuprite::Node#send_keys` ignores empty or nil keys instead of raising, matching the Selenium and rack_test drivers [#313] ### Removed diff --git a/lib/capybara/cuprite/node.rb b/lib/capybara/cuprite/node.rb index 7409592..648aa3d 100644 --- a/lib/capybara/cuprite/node.rb +++ b/lib/capybara/cuprite/node.rb @@ -222,6 +222,9 @@ def ==(other) end def send_keys(*keys) + keys = keys.reject { |key| key.nil? || key == "" } + return if keys.empty? + command(:send_keys, keys) end alias send_key send_keys diff --git a/spec/features/driver_spec.rb b/spec/features/driver_spec.rb index fbe2f66..aad2929 100644 --- a/spec/features/driver_spec.rb +++ b/spec/features/driver_spec.rb @@ -1273,6 +1273,15 @@ def create_screenshot(file, *args) expect(input.value).to eq("Text appended") end + it "ignores empty or nil keys instead of raising" do + input = @session.find(:css, "#filled_input") + + expect { input.native.send_keys("") }.not_to raise_error + expect { input.native.send_keys(nil) }.not_to raise_error + + expect(input.value).to eq("Text") + end + it "sends keys to empty textarea" do input = @session.find(:css, "#empty_textarea")