From ab3ba8e0fd9e6867b63c5cd0a3f929aca8fc236b Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 23 Dec 2016 06:56:25 +0900 Subject: [PATCH] Fix set immediate value (#432) * fix set immediate value --- .../android/specs/android/element/textfield.rb | 10 ++++++++++ ios_tests/lib/ios/specs/ios/element/textfield.rb | 16 ++++++++++++++++ lib/appium_lib/device/device.rb | 14 +++++++++++--- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/android_tests/lib/android/specs/android/element/textfield.rb b/android_tests/lib/android/specs/android/element/textfield.rb index ff119cd4..c8e2d2fd 100644 --- a/android_tests/lib/android/specs/android/element/textfield.rb +++ b/android_tests/lib/android/specs/android/element/textfield.rb @@ -58,5 +58,15 @@ def after_last hide_keyboard end + t 'set_immediate_value' do + message = 'hello' + + wait do + elem = textfield(1) + set_immediate_value(elem, message) + elem.text.must_equal message + end + end + t { after_last } end diff --git a/ios_tests/lib/ios/specs/ios/element/textfield.rb b/ios_tests/lib/ios/specs/ios/element/textfield.rb index e9df0330..b42da86f 100644 --- a/ios_tests/lib/ios/specs/ios/element/textfield.rb +++ b/ios_tests/lib/ios/specs/ios/element/textfield.rb @@ -124,6 +124,22 @@ def must_raise_no_element textfields_exact('does not exist').length.must_equal 0 end + t 'set_immediate_value' do + go_to_textfields + + message = 'hello' + + element = textfield(1) + element.click + element.clear + + set_immediate_value(element, message) + element.text.must_equal message + + set_wait 10 + leave_textfields + end + t 'after_last' do after_last end diff --git a/lib/appium_lib/device/device.rb b/lib/appium_lib/device/device.rb index 13498935..3c597836 100644 --- a/lib/appium_lib/device/device.rb +++ b/lib/appium_lib/device/device.rb @@ -220,10 +220,18 @@ def long_press_keycode(key, metastate = nil) end end - # TODO: TEST ME + # @!method set_immediate_value + # Set the value to element directly + # for iOS; setValue is called in XCUITest instead because XCUITest doesn't provide set value directly. + # https://github.com/appium/appium-xcuitest-driver/blob/793cdc7d5e84bd553e375076e1c6dc7e242c9cde/lib/commands/element.js#L123 + # + # ```ruby + # set_immediate_value element, 'hello' + # ``` add_endpoint_method(:set_immediate_value) do - def set_immediate_value(element, value) - execute :set_immediate_value, { id: element.ref }, value: value + def set_immediate_value(element, *value) + keys = ::Selenium::WebDriver::Keys.encode(value) + execute :set_immediate_value, { id: element.ref }, value: Array(keys) end end