Skip to content

Commit db26711

Browse files
committed
fix: ignore empty or nil keys in Node#send_keys
Ferrum raises ArgumentError on empty or nil keys, so `send_keys("")` or `send_keys(nil)` crashes under Cuprite while the Selenium and rack_test drivers treat them as a no-op. Reject empty and nil entries before delegating to Ferrum so otherwise portable Capybara code stays driver-agnostic.
1 parent 872cfd3 commit db26711

3 files changed

Lines changed: 16 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
### Fixed
1111
- Ensure node has focus before setting value [#280]
12+
- `Capybara::Cuprite::Node#send_keys` ignores empty or nil keys instead of raising, matching the Selenium and rack_test drivers
1213

1314
### Removed
1415

lib/capybara/cuprite/node.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,12 @@ def ==(other)
220220
end
221221

222222
def send_keys(*keys)
223+
# Match the Selenium/rack_test drivers: empty or nil keys are a no-op.
224+
# Ferrum raises on them, which would break otherwise portable Capybara
225+
# code such as `send_keys(value)` where `value` may be "".
226+
keys = keys.reject { |key| key.nil? || key == "" }
227+
return if keys.empty?
228+
223229
command(:send_keys, keys)
224230
end
225231
alias send_key send_keys

spec/features/driver_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1272,6 +1272,15 @@ def create_screenshot(file, *args)
12721272
expect(input.value).to eq("Text appended")
12731273
end
12741274

1275+
it "ignores empty or nil keys instead of raising" do
1276+
input = @session.find(:css, "#filled_input")
1277+
1278+
expect { input.native.send_keys("") }.not_to raise_error
1279+
expect { input.native.send_keys(nil) }.not_to raise_error
1280+
1281+
expect(input.value).to eq("Text")
1282+
end
1283+
12751284
it "sends keys to empty textarea" do
12761285
input = @session.find(:css, "#empty_textarea")
12771286

0 commit comments

Comments
 (0)