Module: Calabash::Cucumber::KeyboardHelpers

Included in:
Core, Operations
Defined in:
lib/calabash-cucumber/keyboard_helpers.rb

Overview

Collection of methods for interacting with the keyboard.

We've gone to great lengths to provide the fastest keyboard entry possible.

Instance Method Summary collapse

Instance Method Details

#docked_keyboard_visible?Boolean

Returns true if a docked keyboard is visible.

A docked keyboard is pinned to the bottom of the view.

Keyboards on the iPhone and iPod are docked.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/calabash-cucumber/keyboard_helpers.rb', line 27

def docked_keyboard_visible?
  keyboard = _query_for_keyboard

  return false if keyboard.nil?

  return true if device_family_iphone?

  keyboard_height = keyboard['rect']['height']
  keyboard_y = keyboard['rect']['y']
  dimensions = screen_dimensions
  scale = dimensions[:scale]

  if landscape?
    screen_height = dimensions[:width]/scale
  else
    screen_height = dimensions[:height]/scale
  end

  screen_height - keyboard_height == keyboard_y
end

#keyboard_visible?Boolean

Returns true if there is a visible keyboard.



78
79
80
81
82
83
# File 'lib/calabash-cucumber/keyboard_helpers.rb', line 78

def keyboard_visible?
  # Order matters!
  docked_keyboard_visible? ||
    undocked_keyboard_visible? ||
    split_keyboard_visible?
end

#lookup_key_name(key_code) ⇒ Object

Waits for a keyboard to appear and returns the localized name of the key_code signifier



147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/calabash-cucumber/keyboard_helpers.rb', line 147

def lookup_key_name(key_code)
  wait_for_keyboard
  begin
    response_json = JSON.parse(http(:path => 'keyboard-language'))
  rescue JSON::ParserError
    raise RuntimeError, "Could not parse output of keyboard-language route. Did the app crash?"
  end
  if response_json['outcome'] != 'SUCCESS'
    screenshot_and_raise "failed to retrieve the keyboard localization"
  end
  localized_lang = response_json['results']['input_mode']
  RunLoop::L10N.new.lookup_localization_name(key_code, localized_lang)
end

#split_keyboard_visible?Boolean

Returns true if a split keyboard is visible.

A split keyboard is floats in the middle of the view and is split to allow faster thumb typing

keyboards on the Phone and iPod are docked and not split.



70
71
72
73
# File 'lib/calabash-cucumber/keyboard_helpers.rb', line 70

def split_keyboard_visible?
  return false if device_family_iphone?
  _query_for_split_keyboard && !_query_for_keyboard
end

#undocked_keyboard_visible?Boolean

Returns true if an undocked keyboard is visible.

A undocked keyboard is floats in the middle of the view.

keyboards on the iPhone and iPod are docked.



54
55
56
57
58
59
60
61
# File 'lib/calabash-cucumber/keyboard_helpers.rb', line 54

def undocked_keyboard_visible?
  return false if device_family_iphone?

  keyboard = _query_for_keyboard
  return false if keyboard.nil?

  !docked_keyboard_visible?
end

#wait_for_keyboard(options = {}) ⇒ Object

Waits for a keyboard to appear and once it does appear waits for :post_timeout seconds.



107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/calabash-cucumber/keyboard_helpers.rb', line 107

def wait_for_keyboard(options={})
  default_opts = {
    :timeout_message => "Keyboard did not appear",
    :post_timeout => 0.3
  }

  merged_opts = default_opts.merge(options)
  wait_for(merged_opts) do
    keyboard_visible?
  end
  true
end

#wait_for_no_keyboard(options = {}) ⇒ Object

Waits for a keyboard to disappear.

Raises:

See Also:



131
132
133
134
135
136
137
138
139
140
141
# File 'lib/calabash-cucumber/keyboard_helpers.rb', line 131

def wait_for_no_keyboard(options={})
  default_opts = {
    :timeout_message => "Keyboard is visible",
  }

  merged_opts = default_opts.merge(options)
  wait_for(merged_opts) do
    !keyboard_visible?
  end
  true
end