lib/briar/keyboard/uia_keyboard.rb in briar-0.1.3.b2 vs lib/briar/keyboard/uia_keyboard.rb in briar-0.1.3.b3
- old
+ new
@@ -1,154 +1,9 @@
require 'calabash-cucumber'
module Briar
module UIAKeyboard
- # use the apple localization codes
- BRIAR_LANGUAGE_KEYS = {
- :en => 'space',
- :de => 'Leerzeichen',
- # could not decide what the language code should be (alt was ja-JP)
- :ja => '空白'
- }
-
- # work in progress
- # the number of buttons on the keyboard will be
- # 3 <== there is no international button
- # 4 <== there is an international button
- def keyboard_has_international? (opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- res = uia('UIATarget.localTarget().frontMostApp().keyboard().buttons().length')
- button_count = res['value']
- button_count == 4
- end
-
- def touch_international_key(opts={})
- default_opts = {:await_keyboard => false,
- :step_pause => 0.4}
- opts = default_opts.merge(opts)
-
- await_keyboard if opts[:await_keyboard]
-
- unless keyboard_has_international?
- screenshot_and_raise 'could not find an international key on the keyboard'
- end
-
- # the international button will be at index 1
- # 3 <== return key
- # 2 <== Dictation key
- # 1 <== International key
- # 0 <== shift key
- res = uia('UIATarget.localTarget().frontMostApp().keyboard().buttons()[1].tap()')
- # sleep for a moment and let the keyboard settle into the new language
- sleep(opts[:step_pause])
- res
- end
-
-
- # work in progress
- # when looking at elements() the space bar will be at the penultimate index
- # when looking at keys() the space bar index seems to float around
- def spacebar_label (opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- elm_count = uia('UIATarget.localTarget().frontMostApp().keyboard().elements().length')['value']
- spacebar_idx = elm_count - 2
- res = uia("UIATarget.localTarget().frontMostApp().keyboard().elements()[#{spacebar_idx}].label()")
- res['value']
- end
-
- def spacebar_has_label?(label, opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- spacebar_label.eql?(label)
- end
-
- def english_keyboard? (opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- spacebar_has_label? BRIAR_LANGUAGE_KEYS[:en]
- end
-
- def german_keyboard? (opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- spacebar_has_label? BRIAR_LANGUAGE_KEYS[:de]
- end
-
- def romaji_keyboard? (opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- spacebar_has_label? BRIAR_LANGUAGE_KEYS[:ja]
- end
-
- def touch_international_until_language(language_key, opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
-
- unless keyboard_has_international?
- screenshot_and_raise 'keyboard does not have an international key'
- end
-
- target = BRIAR_LANGUAGE_KEYS[language_key]
- if target.nil?
- screenshot_and_raise "unknown language key '#{language_key}'"
- end
-
- stop_at = spacebar_label
- return if target.eql?(stop_at)
-
- touch_international_key
-
- current = spacebar_label
- loop do
- break if current.eql?(target)
- touch_international_key
- current = spacebar_label
- if current.eql?(stop_at)
- screenshot_and_raise "could not find keyboard using key '#{language_key}' and space bar label '#{target}'"
- end
- end
- end
-
- def is_numeric_keyboard?(opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- res = uia('UIATarget.localTarget().frontMostApp().keyboard().keys().length')['value']
- res == 12
- end
-
- def briar_keyboard_send_numeric_backspace(opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- if ios7?
- uia('UIATarget.localTarget().frontMostApp().keyboard().buttons()[0].tap()')
- else
- keyboard_enter_char 'Delete'
- end
- end
-
- def briar_keyboard_send_backspace(opts={})
- default_opts = {:await_keyboard => false}
- opts = default_opts.merge(opts)
- await_keyboard if opts[:await_keyboard]
- if is_numeric_keyboard?
- briar_keyboard_send_numeric_backspace
- else
- briar_keyboard_send_backspace
- end
- end
-
def uia_keyboard_visible?
res = uia('UIATarget.localTarget().frontMostApp().keyboard()')['value']
not res.eql?(':nil')
end
@@ -163,10 +18,19 @@
end
wait_for(opts) do
uia_keyboard_visible?
end
-
end
+ def dismiss_ipad_keyboard
+ screenshot_and_raise 'cannot dismiss keyboard on iphone' if iphone?
+ screenshot_and_raise 'cannot dismiss keyboard without launching with instruments' unless uia_available?
+ send_uia_command command: "uia.keyboard().buttons()['Hide keyboard'].tap()"
+ step_pause
+ end
end
end
+
+
+
+