Module: Calabash::Cucumber::Operations

Includes:
Core, DatePicker, IPad, KeyboardHelpers, KeychainHelpers, TestsHelpers, WaitHelpers, Test::Unit::Assertions
Included in:
IBase
Defined in:
lib/calabash-cucumber/operations.rb

Constant Summary

Constants included from DatePicker

DatePicker::OBJC_DATE_AND_TIME_FMT, DatePicker::RUBY_DATE_AND_TIME_FMT, DatePicker::UI_DATE_PICKER_MODE_COUNT_DOWN_TIMER, DatePicker::UI_DATE_PICKER_MODE_DATE, DatePicker::UI_DATE_PICKER_MODE_DATE_AND_TIME, DatePicker::UI_DATE_PICKER_MODE_TIME

Constants included from PlaybackHelpers

PlaybackHelpers::DATA_PATH

Constants included from KeyboardHelpers

KeyboardHelpers::KEYPLANE_NAMES, KeyboardHelpers::UIA_SUPPORTED_CHARS

Constants included from WaitHelpers

WaitHelpers::CALABASH_CONDITIONS, WaitHelpers::DEFAULT_OPTS

Instance Method Summary collapse

Methods included from IPad

#ensure_ipad_emulation_1x, #ensure_ipad_emulation_scale

Methods included from DatePicker

#args_for_change_date_on_picker, #countdown_mode?, #date_and_time_mode?, #date_mode?, #date_picker_mode, #date_time_from_picker, #maximum_date_time_from_picker, #minimum_date_time_from_picker, #picker_set_date_time, #query_string_for_picker, #should_see_date_picker, #time_mode?

Methods included from Core

#_debug_level_response, #backdoor, #calabash_exit, #cell_swipe, #client_version, #console_attach, #double_tap, #extract_query_and_options, #flash, #flick, #launcher, #location_for_place, #locations_for_place, #macro, #move_wheel, #pan, #picker, #pinch, #prepare_query_options, #query, #query_action_with_options, #query_all, #scroll, #scroll_to_cell, #scroll_to_collection_view_item, #scroll_to_collection_view_item_with_mark, #scroll_to_row, #scroll_to_row_with_mark, #send_app_to_background, #server_debug_level, #server_version, #set_location, #set_server_debug_level, #shutdown_test_server, #start_test_server_in_background, #stop_test_server, #swipe, #touch, #touch_hold, #two_finger_tap

Methods included from PlaybackHelpers

#find_compatible_recording, #interpolate, #load_playback_data, #load_recording, #playback, #playback_file_directories, #record_begin, #record_end, #recording_name_for

Methods included from RotationHelpers

#rotate, #rotate_home_button_to, #rotation_candidates

Methods included from StatusBarHelpers

#device_orientation, #landscape?, #portrait?, #status_bar_orientation

Methods included from UIA

#escape_uia_string, #send_uia_command, #uia, #uia_call, #uia_call_method, #uia_call_windows, #uia_double_tap, #uia_double_tap_mark, #uia_double_tap_offset, #uia_element_does_not_exist?, #uia_element_exists?, #uia_enter, #uia_flick_offset, #uia_handle_command, #uia_names, #uia_pan, #uia_pan_offset, #uia_pinch, #uia_pinch_offset, #uia_query, #uia_query_el, #uia_query_windows, #uia_screenshot, #uia_scroll_to, #uia_send_app_to_background, #uia_serialize_argument, #uia_serialize_arguments, #uia_serialize_command, #uia_set_location, #uia_swipe, #uia_swipe_offset, #uia_tap, #uia_tap_mark, #uia_tap_offset, #uia_touch_hold, #uia_touch_hold_offset, #uia_two_finger_tap, #uia_two_finger_tap_offset, #uia_type_string

Methods included from Map

#assert_map_results, #map, #raw_map

Methods included from FailureHelpers

#fail, #screenshot, #screenshot_and_raise, #screenshot_embed

Methods included from QueryHelpers

#escape_quotes, #point_from

Methods included from ConnectionHelpers

#connection, #http

Methods included from EnvironmentHelpers

#_deprecated, #debug_logging?, #default_device, #device_family_iphone?, #full_console_logging?, #ios5?, #ios6?, #ios7?, #ipad?, #iphone?, #iphone_4in?, #iphone_5?, #iphone_app_emulated_on_ipad?, #ipod?, #no_deprecation_warnings?, #simulator?, #uia_available?, #uia_not_available?, #xamarin_test_cloud?

Methods included from KeychainHelpers

#_keychain_get, #_keychain_post, #keychain_accounts, #keychain_accounts_for_service, #keychain_clear, #keychain_clear_accounts_for_service, #keychain_delete_password, #keychain_password, #keychain_set_password

Methods included from KeyboardHelpers

#_current_keyplane, #_do_keyplane, #_ensure_can_enter_text, #_ipad_keyboard_modes, #_point_for_ipad_keyboard_mode_key, #_qstr_for_keyboard, #_query_for_keyboard_mode_key, #_query_for_touch_for_keyboard_mode_option, #_query_uia_hide_keyboard_button, #_search_keyplanes_and_enter_char, #_touch_bottom_keyboard_mode_row, #_touch_top_keyboard_mode_row, #_wait_for_keyboard_in_mode, #await_keyboard, #dismiss_ipad_keyboard, #docked_keyboard_visible?, #done, #ensure_docked_keyboard, #ensure_split_keyboard, #ensure_undocked_keyboard, #ipad_keyboard_mode, #keyboard_enter_char, #keyboard_enter_text, #keyboard_visible?, #split_keyboard_visible?, #tap_keyboard_action_key, #uia_keyboard_visible?, #uia_wait_for_keyboard, #undocked_keyboard_visible?, #wait_for_keyboard

Methods included from TestsHelpers

#check_element_does_not_exist, #check_element_exists, #check_view_with_mark_exists, #classes, #each_cell, #each_cell_and_back, #element_does_not_exist, #element_exists, #navigation_path, #query_map, #view_with_mark_exists

Methods included from WaitHelpers

#handle_error_with_options, #screenshot_and_retry, #touch_transition, #until_element_does_not_exist, #until_element_exists, #wait_error, #wait_for, #wait_for_condition, #wait_for_elements_do_not_exist, #wait_for_elements_exist, #wait_for_no_network_indicator, #wait_for_none_animating, #wait_for_transition, #wait_poll, #when_element_exists

Instance Method Details

#assert_home_direction(expected) ⇒ Object



45
46
47
48
49
# File 'lib/calabash-cucumber/operations.rb', line 45

def assert_home_direction(expected)
  unless expected.to_sym == home_direction
    screenshot_and_raise "Expected home button to have direction #{expected} but had #{home_direction}"
  end
end

#await_page(clz, *args) ⇒ Object



37
38
39
# File 'lib/calabash-cucumber/operations.rb', line 37

def await_page(clz,*args)
  clz.new(self,*args).await
end

#clear_text(uiquery) ⇒ Object

sets the text value of the views matched by uiquery to '' (the empty string)

using this sparingly and with caution

it is recommended that you instead do some combination of the following

  • use queries and touches to replicate with the user would

    • for text fields, implement a clear text button and touch it

    • for text views, use touches to reveal text editing popup

    see github.com/calabash/calabash-ios/issues/151

https://github.com/calabash/calabash-ios/wiki/03.5-Calabash-iOS-Ruby-API

raises an error if the uiquery finds no matching queries or finds a single view that does not respond to the objc selector ‘setText’

IMPORTANT calling:

> clear_text("view")

will clear the text on all visible views that respond to ‘setText’



134
135
136
137
138
139
# File 'lib/calabash-cucumber/operations.rb', line 134

def clear_text(uiquery)
  views_modified = map(uiquery, :setText, '')
  msg = "query '#{uiquery}' returned no matching views that respond to 'setText'"
  assert_map_results(views_modified, msg)
  views_modified
end

#home_directionObject



41
42
43
# File 'lib/calabash-cucumber/operations.rb', line 41

def home_direction
  status_bar_orientation.to_sym
end

#html(q) ⇒ Object



67
68
69
# File 'lib/calabash-cucumber/operations.rb', line 67

def html(q)
  query(q).map { |e| e['html'] }
end

#identifier(uiquery) ⇒ Object



55
56
57
# File 'lib/calabash-cucumber/operations.rb', line 55

def identifier(uiquery)
  query(uiquery, :accessibilityIdentifier)
end

#label(uiquery) ⇒ Object



51
52
53
# File 'lib/calabash-cucumber/operations.rb', line 51

def label(uiquery)
  query(uiquery, :accessibilityLabel)
end

#page(clz, *args) ⇒ Object



33
34
35
# File 'lib/calabash-cucumber/operations.rb', line 33

def page(clz,*args)
  clz.new(self,*args)
end

#set_text(uiquery, txt) ⇒ Object

Deprecated.

since 0.9.145

sets the text value of the views matched by uiquery to txt

we have stopped testing this method. you have been warned.

  • to enter text using the native keyboard use ‘keyboard_enter_text’

  • to delete text use ‘keyboard_enter_text(’Delete’)“

  • to clear a text field or text view:

    • RECOMMENDED: use queries and touches to replicate what the user would do

    • use ‘clear_text’

https://github.com/calabash/calabash-ios/wiki/03.5-Calabash-iOS-Ruby-API

raises an error if the uiquery finds no matching queries or finds a view that does not respond to the objc selector ‘setText’



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/calabash-cucumber/operations.rb', line 89

def set_text(uiquery, txt)
  msgs = ["'set_text' is deprecated and its behavior is now unpredictable",
          "* to enter text using the native keyboard use 'keyboard_enter_text'",
          "* to delete text use 'keyboard_enter_text('Delete')",
          '* to clear a text field or text view:',
          '  - RECOMMENDED: use queries and touches to replicate what the user would do',
          '    * for text fields, implement a clear text button and touch it',
          '    * for text views, use touches to reveal text editing popup',
          '    see https://github.com/calabash/calabash-ios/issues/151',
          "  - use 'clear_text'",
          'https://github.com/calabash/calabash-ios/wiki/03.5-Calabash-iOS-Ruby-API']
  msg = msgs.join("\n")
  _deprecated('0.9.145', msg, :warn)

  text_fields_modified = map(uiquery, :setText, txt)

  msg = "query '#{uiquery}' returned no matching views that respond to 'setText'"
  assert_map_results(text_fields_modified, msg)
  text_fields_modified
end

#set_user_pref(key, val) ⇒ Object



142
143
144
145
146
147
148
149
150
151
# File 'lib/calabash-cucumber/operations.rb', line 142

def set_user_pref(key, val)
  res = http({:method => :post, :path => 'userprefs'},
             {:key=> key, :value => val})
  res = JSON.parse(res)
  if res['outcome'] != 'SUCCESS'
    screenshot_and_raise "set_user_pref #{key} = #{val} failed because: #{res['reason']}\n#{res['details']}"
  end

  res['results']
end

#simple_touch(label, *args) ⇒ Object



59
60
61
# File 'lib/calabash-cucumber/operations.rb', line 59

def simple_touch(label, *args)
  touch("view marked:'#{label}'", *args)
end

#tap(label, *args) ⇒ Object



63
64
65
# File 'lib/calabash-cucumber/operations.rb', line 63

def tap(label, *args)
  simple_touch(label, *args)
end

#user_pref(key) ⇒ Object



153
154
155
156
157
158
159
160
161
162
# File 'lib/calabash-cucumber/operations.rb', line 153

def user_pref(key)
  res = http({:method => :get, :raw => true, :path => 'userprefs'},
             {:key=> key})
  res = JSON.parse(res)
  if res['outcome'] != 'SUCCESS'
    screenshot_and_raise "get user_pref #{key} failed because: #{res['reason']}\n#{res['details']}"
  end

  res['results'].first
end