From 64ce735de58bec4e3d5033a211a97fc6f288db86 Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Fri, 25 May 2018 09:38:13 -0700 Subject: [PATCH] Ensure keystrokes are sent when Selenium::Node#set is passed a String for date/time fields --- History.md | 7 +++++++ lib/capybara/selenium/node.rb | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/History.md b/History.md index 166b1420..5d01b878 100644 --- a/History.md +++ b/History.md @@ -10,6 +10,13 @@ Release date: unreleased * New global configuration `default_set_options` used in `Capybara::Node::Element#set` as default `options` hash [Champier Cyril] * `execute_javascript` and `evaluate_javascript` can now be called on elements to run the JS in the context of the element [Thomas Walpole] +# Version 3.1.1 +Release date: unreleased + +### Fixes + +* Ensure keystrokes are sent when setting time/date fields to a string with the Selenium driver [Thomas Walpole] + # Version 3.1.0 Release date: 2018-05-10 diff --git a/lib/capybara/selenium/node.rb b/lib/capybara/selenium/node.rb index 52164a76..734ee23b 100644 --- a/lib/capybara/selenium/node.rb +++ b/lib/capybara/selenium/node.rb @@ -238,19 +238,19 @@ private end def set_date(value) # rubocop:disable Naming/AccessorMethodName - return set_text(value) unless value.respond_to?(:to_date) + return set_text(value) if value.is_a?(String) || !value.respond_to?(:to_date) # TODO: this would be better if locale can be detected and correct keystrokes sent update_value_js(value.to_date.strftime('%Y-%m-%d')) end def set_time(value) # rubocop:disable Naming/AccessorMethodName - return set_text(value) unless value.respond_to?(:to_time) + return set_text(value) if value.is_a?(String) || !value.respond_to?(:to_time) # TODO: this would be better if locale can be detected and correct keystrokes sent update_value_js(value.to_time.strftime('%H:%M')) end def set_datetime_local(value) # rubocop:disable Naming/AccessorMethodName - return set_text(value) unless value.respond_to?(:to_time) + return set_text(value) if value.is_a?(String) || !value.respond_to?(:to_time) # TODO: this would be better if locale can be detected and correct keystrokes sent update_value_js(value.to_time.strftime('%Y-%m-%dT%H:%M')) end