Module: Calabash::Android::Operations

Includes:
EnvironmentHelpers, TextHelpers, TouchHelpers, WaitHelpers
Included in:
Calabash::ABase
Defined in:
lib/calabash-android/operations.rb

Defined Under Namespace

Classes: Device

Constant Summary

Constants included from WaitHelpers

WaitHelpers::DEFAULT_OPTS

Instance Method Summary collapse

Methods included from WaitHelpers

#handle_error_with_options, #screenshot_and_retry, #until_element_does_not_exist, #until_element_exists, #wait_error, #wait_for, #wait_for_activity, #wait_for_element_does_not_exist, #wait_for_element_exists, #wait_for_elements_do_not_exist, #wait_for_elements_exist, #wait_for_text, #wait_for_text_to_disappear, #wait_poll, #when_element_exists

Methods included from TouchHelpers

#double_tap, #drag, #execute_gesture, #find_coordinate, #flick, #flick_down, #flick_left, #flick_right, #flick_up, #long_press, #long_press_when_element_exists, #pan, #pan_down, #pan_left, #pan_right, #pan_up, #pinch, #pinch_in, #pinch_out, #query_result?, #tap, #tap_mark, #tap_when_element_exists, #touch

Methods included from TextHelpers

#assert_text, #clear_text, #clear_text_in, #enter_text, #escape_quotes, #has_text?, #keyboard_enter_char, #keyboard_enter_text

Methods included from EnvironmentHelpers

#xamarin_test_cloud?

Instance Method Details

#app_to_background(secs) ⇒ Object



1103
1104
1105
# File 'lib/calabash-android/operations.rb', line 1103

def app_to_background(secs)
  ni
end

#backdoor(method_name, arguments = [], options = {}) ⇒ Object



1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
# File 'lib/calabash-android/operations.rb', line 1173

def backdoor(method_name, arguments = [], options={})
  arguments = [arguments] unless arguments.is_a?(Array)

  result = JSON.parse(http('/backdoor', {method_name: method_name, arguments: arguments}))

  if result['outcome'] != 'SUCCESS'
    raise result.to_s
  end

  result['result']
end

#cell_swipe(options = {}) ⇒ Object



960
961
962
# File 'lib/calabash-android/operations.rb', line 960

def cell_swipe(options={})
  ni
end

#check_element_does_not_exist(query) ⇒ Object



1125
1126
1127
1128
1129
# File 'lib/calabash-android/operations.rb', line 1125

def check_element_does_not_exist( query )
  if element_exists( query )
    screenshot_and_raise "Expected no elements to match query: #{query}"
  end
end

#check_element_exists(query) ⇒ Object



1119
1120
1121
1122
1123
# File 'lib/calabash-android/operations.rb', line 1119

def check_element_exists( query )
  if not element_exists( query )
    screenshot_and_raise "No element found for query: #{query}"
  end
end

#check_view_with_mark_exists(expected_mark) ⇒ Object



1131
1132
1133
# File 'lib/calabash-android/operations.rb', line 1131

def check_view_with_mark_exists(expected_mark)
  check_element_exists( "view marked:'#{expected_mark}'" )
end

#classes(query_string, *args) ⇒ Object



247
248
249
# File 'lib/calabash-android/operations.rb', line 247

def classes(query_string, *args)
  query(query_string, :class, *args)
end

#clear_app_dataObject



123
124
125
# File 'lib/calabash-android/operations.rb', line 123

def clear_app_data
  default_device.clear_app_data
end

#clear_preferences(name) ⇒ Object



180
181
182
# File 'lib/calabash-android/operations.rb', line 180

def clear_preferences(name)
  default_device.clear_preferences(name)
end

#client_versionObject



152
153
154
# File 'lib/calabash-android/operations.rb', line 152

def client_version
  default_device.client_version
end

#connect_to_test_serverObject

app life cycle



266
267
268
269
270
# File 'lib/calabash-android/operations.rb', line 266

def connect_to_test_server
  puts "Explicit calls to connect_to_test_server should be removed."
  puts "Please take a look in your hooks file for calls to this methods."
  puts "(Hooks are stored in features/support)"
end

#current_activityObject



42
43
44
# File 'lib/calabash-android/operations.rb', line 42

def current_activity
  `#{default_device.adb_command} shell dumpsys window windows`.each_line.grep(/mFocusedApp.+[\.\/]([^.\s\/\}]+)/){$1}.first
end

#default_deviceObject



58
59
60
61
62
63
# File 'lib/calabash-android/operations.rb', line 58

def default_device
  unless @default_device
    @default_device = Device.new(self, ENV["ADB_DEVICE_ARG"], ENV["TEST_SERVER_PORT"], ENV["APP_PATH"], ENV["TEST_APP_PATH"])
  end
  @default_device
end

#deprecated_actionsObject



92
93
94
95
96
# File 'lib/calabash-android/operations.rb', line 92

def deprecated_actions
  @deprecated_actions ||= Hash[
      *File.readlines(File.join(File.dirname(__FILE__), 'deprecated_actions.map')).map{|e| e.chomp.split(',', 2)}.flatten
  ]
end

#disconnect_from_test_serverObject



272
273
274
275
276
# File 'lib/calabash-android/operations.rb', line 272

def disconnect_from_test_server
  puts "Explicit calls to disconnect_from_test_server should be removed."
  puts "Please take a look in your hooks file for calls to this methods."
  puts "(Hooks are stored in features/support)"
end

#doneObject



964
965
966
# File 'lib/calabash-android/operations.rb', line 964

def done
  ni
end

#each_item(opts = {:query => "android.widget.ListView", :post_scroll => 0.2}, &block) ⇒ Object



206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# File 'lib/calabash-android/operations.rb', line 206

def each_item(opts={:query => "android.widget.ListView", :post_scroll => 0.2}, &block)
  uiquery = opts[:query] || "android.widget.ListView"
  skip_if = opts[:skip_if] || lambda { |i| false }
  stop_when = opts[:stop_when] || lambda { |i| false }
  check_element_exists(uiquery)
  num_items = query(opts[:query], :adapter, :count).first
  num_items.times do |item|
    next if skip_if.call(item)
    break if stop_when.call(item)

    scroll_to_row(opts[:query], item)
    sleep(opts[:post_scroll]) if opts[:post_scroll] and opts[:post_scroll] > 0
    yield(item)
  end
end

#element_does_not_exist(uiquery) ⇒ Object



1107
1108
1109
# File 'lib/calabash-android/operations.rb', line 1107

def element_does_not_exist(uiquery)
  query(uiquery).empty?
end

#element_exists(uiquery) ⇒ Object



1111
1112
1113
# File 'lib/calabash-android/operations.rb', line 1111

def element_exists(uiquery)
  not element_does_not_exist(uiquery)
end

#element_is_not_hidden(uiquery) ⇒ Object

a better name would be element_exists_and_is_not_hidden



1136
1137
1138
# File 'lib/calabash-android/operations.rb', line 1136

def element_is_not_hidden(uiquery)
  ni
end

#evaluate_javascript(query_string, javascript, opt = {}) ⇒ Object



1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
# File 'lib/calabash-android/operations.rb', line 1161

def evaluate_javascript(query_string, javascript, opt={})
  wait_for_elements_exist(query_string, {timeout: Calabash::Android::Defaults.query_timeout})
  result = JSON.parse(http("/map", {query: query_string, operation: {method_name: 'execute-javascript'}, javascript: javascript}))

  if result['outcome'] != 'SUCCESS' || result['results'].nil?
    parsed_result = result['results'].map {|r| "\"#{r}\","}.join("\n")
    raise "Could not evaluate javascript: \n#{parsed_result}"
  end

  result['results']
end

#execute_uiquery(uiquery) ⇒ Object



828
829
830
831
832
833
834
835
836
837
838
839
840
841
# File 'lib/calabash-android/operations.rb', line 828

def execute_uiquery(uiquery)
  if uiquery.instance_of? String
    elements = query(uiquery)

    return elements.first unless elements.empty?
  else
    elements = uiquery

    return elements.first if elements.instance_of?(Array)
    return elements if elements.instance_of?(Hash)
  end

  nil
end

#fail(msg = "Error. Check log for details.", options = {:prefix => nil, :name => nil, :label => nil}) ⇒ Object



160
161
162
# File 'lib/calabash-android/operations.rb', line 160

def fail(msg="Error. Check log for details.", options={:prefix => nil, :name => nil, :label => nil})
  screenshot_and_raise(msg, options)
end

#find_scrollable_view(options = {}) ⇒ Object



968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
# File 'lib/calabash-android/operations.rb', line 968

def find_scrollable_view(options={})
  timeout = options[:timeout] || 30

  begin
    Timeout.timeout(timeout, WaitError) do
      scroll_view_query_string = "android.widget.ScrollView index:0"
      list_view_query_string = "android.widget.AbsListView index:0"
      web_view_query_string = "android.webkit.WebView index:0"

      loop do
        if element_exists(scroll_view_query_string)
          return scroll_view_query_string
        elsif element_exists(list_view_query_string)
          return list_view_query_string
        elsif element_exists(web_view_query_string)
          return web_view_query_string
        end
      end
    end
  rescue WaitError
    raise WaitError.new('Could not find any scrollable views')
  end
end

#flash(query_string) ⇒ Object



202
203
204
# File 'lib/calabash-android/operations.rb', line 202

def flash(query_string)
  map(query_string, :flash)
end

#get_preferences(name) ⇒ Object



172
173
174
# File 'lib/calabash-android/operations.rb', line 172

def get_preferences(name)
  default_device.get_preferences(name)
end

#hide_soft_keyboardObject



824
825
826
# File 'lib/calabash-android/operations.rb', line 824

def hide_soft_keyboard
  perform_action('hide_soft_keyboard')
end

#html(q) ⇒ Object



851
852
853
# File 'lib/calabash-android/operations.rb', line 851

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

#http(path, data = {}, options = {}) ⇒ Object



847
848
849
# File 'lib/calabash-android/operations.rb', line 847

def http(path, data = {}, options = {})
  default_device.http(path, data, options)
end

#install_app(app_path) ⇒ Object



106
107
108
# File 'lib/calabash-android/operations.rb', line 106

def install_app(app_path)
  default_device.install_app(app_path)
end

#interpolate(recording, options = {}) ⇒ Object



1149
1150
1151
# File 'lib/calabash-android/operations.rb', line 1149

def interpolate(recording, options={})
  ni
end

#label(uiquery) ⇒ Object



811
812
813
# File 'lib/calabash-android/operations.rb', line 811

def label(uiquery)
  ni
end

#load_playback_data(recording, options = {}) ⇒ Object



1141
1142
1143
# File 'lib/calabash-android/operations.rb', line 1141

def load_playback_data(recording,options={})
  ni
end

#log(message) ⇒ Object



46
47
48
# File 'lib/calabash-android/operations.rb', line 46

def log(message)
  $stdout.puts "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")} - #{message}" if (ARGV.include? "-v" or ARGV.include? "--verbose")
end

#macro(txt) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/calabash-android/operations.rb', line 50

def macro(txt)
  if self.respond_to?(:step)
    step(txt)
  else
    Then(txt)
  end
end

#make_http_request(options) ⇒ Object



1204
1205
1206
# File 'lib/calabash-android/operations.rb', line 1204

def make_http_request(options)
  default_device.make_http_request(options)
end

#map(query, method_name, *method_args) ⇒ Object



1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
# File 'lib/calabash-android/operations.rb', line 1185

def map(query, method_name, *method_args)
  operation_map = {
      :method_name => method_name,
      :arguments => method_args
  }
  res = http("/map",
             {:query => query, :operation => operation_map})
  res = JSON.parse(res)
  if res['outcome'] != 'SUCCESS'
    screenshot_and_raise "map #{query}, #{method_name} failed because: #{res['reason']}\n#{res['details']}"
  end

  res['results']
end

#niObject



251
252
253
# File 'lib/calabash-android/operations.rb', line 251

def ni
  raise "Not yet implemented."
end

#page(clz, *args) ⇒ Object

simple page object helper



259
260
261
# File 'lib/calabash-android/operations.rb', line 259

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

#perform_action(action, *arguments) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/calabash-android/operations.rb', line 75

def perform_action(action, *arguments)
  if removed_actions.include?(action)
    puts "\e[31mError: The action '#{action}' was removed in calabash-android 0.5\e[0m"
    puts 'Solutions that do not require the removed action can be found on:'
    puts "\e[36mhttps://github.com/calabash/calabash-android/blob/master/migrating_to_calabash_0.5.md\##{action}\e[0m"
  elsif deprecated_actions.has_key?(action)
    puts "\e[31mWarning: The action '#{action}' is deprecated\e[0m"
    puts "\e[32mUse '#{deprecated_actions[action]}' instead\e[0m"
  end

  default_device.perform_action(action, *arguments)
end

#performAction(action, *arguments) ⇒ Object



69
70
71
72
73
# File 'lib/calabash-android/operations.rb', line 69

def performAction(action, *arguments)
  puts "Warning: The method performAction is deprecated. Please use perform_action instead."

  perform_action(action, *arguments)
end

#playback(recording, options = {}) ⇒ Object



1145
1146
1147
# File 'lib/calabash-android/operations.rb', line 1145

def playback(recording, options={})
  ni
end

#press_back_buttonObject



872
873
874
# File 'lib/calabash-android/operations.rb', line 872

def press_back_button
  press_button('KEYCODE_BACK')
end

#press_button(key) ⇒ Object



868
869
870
# File 'lib/calabash-android/operations.rb', line 868

def press_button(key)
  perform_action('press_key', key)
end

#press_down_buttonObject



880
881
882
# File 'lib/calabash-android/operations.rb', line 880

def press_down_button
  press_button('KEYCODE_DPAD_DOWN')
end

#press_enter_buttonObject



896
897
898
# File 'lib/calabash-android/operations.rb', line 896

def press_enter_button
  press_button('KEYCODE_ENTER')
end

#press_left_buttonObject



888
889
890
# File 'lib/calabash-android/operations.rb', line 888

def press_left_button
  press_button('KEYCODE_DPAD_LEFT')
end

#press_menu_buttonObject



876
877
878
# File 'lib/calabash-android/operations.rb', line 876

def press_menu_button
  press_button('KEYCODE_MENU')
end

#press_right_buttonObject



892
893
894
# File 'lib/calabash-android/operations.rb', line 892

def press_right_button
  press_button('KEYCODE_DPAD_RIGHT')
end

#press_up_buttonObject



884
885
886
# File 'lib/calabash-android/operations.rb', line 884

def press_up_button
  press_button('KEYCODE_DPAD_UP')
end

#press_user_action_button(action_name = nil) ⇒ Object



860
861
862
863
864
865
866
# File 'lib/calabash-android/operations.rb', line 860

def press_user_action_button(action_name=nil)
  if action_name.nil?
    perform_action("press_user_action_button")
  else
    perform_action("press_user_action_button", action_name)
  end
end

#pull(remote, local) ⇒ Object



127
128
129
# File 'lib/calabash-android/operations.rb', line 127

def pull(remote, local)
  default_device.pull(remote, local)
end

#push(local, remote) ⇒ Object



131
132
133
# File 'lib/calabash-android/operations.rb', line 131

def push(local, remote)
  default_device.push(local, remote)
end

#query(uiquery, *args) ⇒ Object



184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
# File 'lib/calabash-android/operations.rb', line 184

def query(uiquery, *args)
  converted_args = []
  args.each do |arg|
    if arg.is_a?(Hash) and arg.count == 1
      if arg.values.is_a?(Array) && arg.values.count == 1
        values = arg.values.flatten
      else
        values = [arg.values]
      end

      converted_args << {:method_name => arg.keys.first, :arguments => values}
    else
      converted_args << arg
    end
  end
  map(uiquery,:query,*converted_args)
end

#record_beginObject



1153
1154
1155
# File 'lib/calabash-android/operations.rb', line 1153

def record_begin
  ni
end

#record_end(file_name) ⇒ Object



1157
1158
1159
# File 'lib/calabash-android/operations.rb', line 1157

def record_end(file_name)
  ni
end

#reinstall_appsObject



98
99
100
# File 'lib/calabash-android/operations.rb', line 98

def reinstall_apps
  default_device.reinstall_apps
end

#reinstall_test_serverObject



102
103
104
# File 'lib/calabash-android/operations.rb', line 102

def reinstall_test_server
  default_device.reinstall_test_server
end

#removed_actionsObject



88
89
90
# File 'lib/calabash-android/operations.rb', line 88

def removed_actions
  @removed_actions ||= File.readlines(File.join(File.dirname(__FILE__), 'removed_actions.txt')).map(&:chomp)
end

#rotate(dir) ⇒ Object



1099
1100
1101
# File 'lib/calabash-android/operations.rb', line 1099

def rotate(dir)
  ni
end

#screenshot(options = {:prefix => nil, :name => nil}) ⇒ Object



148
149
150
# File 'lib/calabash-android/operations.rb', line 148

def screenshot(options={:prefix => nil, :name => nil})
  default_device.screenshot(options)
end

#screenshot_and_raise(msg, options = nil) ⇒ Object



815
816
817
818
819
820
821
822
# File 'lib/calabash-android/operations.rb', line 815

def screenshot_and_raise(msg, options = nil)
  if options
    screenshot_embed options
  else
    screenshot_embed
  end
  raise(msg)
end

#screenshot_embed(options = {:prefix => nil, :name => nil, :label => nil}) ⇒ Object



143
144
145
146
# File 'lib/calabash-android/operations.rb', line 143

def screenshot_embed(options={:prefix => nil, :name => nil, :label => nil})
  path = default_device.screenshot(options)
  embed(path, "image/png", options[:label] || File.basename(path))
end

#scroll(query_string, direction) ⇒ Object



1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
# File 'lib/calabash-android/operations.rb', line 1000

def scroll(query_string, direction)
  if direction != :up && direction != :down
    raise 'Only upwards and downwards scrolling is supported for now'
  end

  action = lambda do
    elements = query(query_string)
    raise "No elements found. Query: #{query_string}" if elements.empty?

    if elements.length > 1
      query_string = "#{query_string} index:0"
    end

    element = elements.first

    response = query(query_string, :getFirstVisiblePosition).first

    if response.is_a?(Hash) && response.has_key?("error") # View is not of type android.widget.AbsListView
      scroll_x = 0
      scroll_y = 0
      width = element['rect']['width']
      height = element['rect']['height']

      if direction == :up
        scroll_y = -height/2
      else
        scroll_y = height/2
      end

      query(query_string, {scrollBy: [scroll_x.to_i, scroll_y.to_i]})
    else # View is of type android.widget.AbsListView
      first_position = response.to_i
      last_position = query(query_string, :getLastVisiblePosition).first.to_i

      selection_index = if direction == :up
                          [first_position + [first_position - last_position + 1, -1].min, 0].max
                        elsif direction == :down
                          first_position + [last_position - first_position, 1].max
                        end

      query(query_string, setSelection: selection_index)
    end
  end

  when_element_exists(query_string, action: action)
end

#scroll_down(options = {}) ⇒ Object



996
997
998
# File 'lib/calabash-android/operations.rb', line 996

def scroll_down(options={})
  scroll(find_scrollable_view(options), :down)
end

#scroll_to(query_string, options = {}) ⇒ Object



1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
# File 'lib/calabash-android/operations.rb', line 1047

def scroll_to(query_string, options={})
  options[:action] ||= lambda {}

  all_query_string = query_string

  unless all_query_string.chomp.downcase.start_with?('all')
    all_query_string = "all #{all_query_string}"
  end

  wait_for_element_exists(all_query_string)

  element = query(all_query_string).first
  raise "No elements found. Query: #{all_query_string}" if element.nil?
  element_y = element['rect']['y']
  element_height = element['rect']['height']
  element_bottom = element_y + element_height

  scroll_view_query_string = options[:container] || if element.has_key?('html')
                                                      "android.webkit.WebView id:'#{element['webView']}'"
                                                    else
                                                      "#{all_query_string} parent android.widget.ScrollView index:0"
                                                    end

  scroll_element = query(scroll_view_query_string).first

  raise "Could not find parent scroll view. Query: '#{escape_quotes(scroll_view_query_string)}'" if scroll_element.nil?

  scroll_element_y = scroll_element['rect']['y']
  scroll_element_height = scroll_element['rect']['height']

  if element_bottom > scroll_element_y + scroll_element_height
    scroll_by_y = element_bottom - (scroll_element_y + scroll_element_height)
  elsif element_y < scroll_element_y
    scroll_by_y = element_y - scroll_element_y
  else
    scroll_by_y = 0
  end

  if scroll_by_y != 0
    result = query(scroll_view_query_string, {scrollBy: [0, scroll_by_y]}).first
    raise 'Could not scroll parent view' if result != '<VOID>'
  end

  visibility_query_string = all_query_string[4..-1]
  when_element_exists(visibility_query_string, options)
end

#scroll_to_row(uiquery, number) ⇒ Object



1094
1095
1096
1097
# File 'lib/calabash-android/operations.rb', line 1094

def scroll_to_row(uiquery,number)
  query(uiquery, {:smoothScrollToPosition => number})
  puts "TODO:detect end of scroll - use sleep for now"
end

#scroll_up(options = {}) ⇒ Object



992
993
994
# File 'lib/calabash-android/operations.rb', line 992

def scroll_up(options={})
  scroll(find_scrollable_view(options), :up)
end

#select_context_menu_item(view_uiquery, menu_item_query_string) ⇒ Object



905
906
907
908
909
910
911
912
913
# File 'lib/calabash-android/operations.rb', line 905

def select_context_menu_item(view_uiquery, menu_item_query_string)
  long_press(view_uiquery)

  container_class = 'com.android.internal.view.menu.ListMenuItemView'
  wait_for_element_exists(container_class)

  combined_query_string = "#{container_class} descendant #{menu_item_query_string}"
  touch(combined_query_string)
end

#select_item_from_spinner(item_query_string, options = {}) ⇒ Object



915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
# File 'lib/calabash-android/operations.rb', line 915

def select_item_from_spinner(item_query_string, options={})
  spinner_query_string = options[:spinner] || "android.widget.AbsSpinner"
  direction = options[:direction] || :down
  count = query(spinner_query_string, :getCount).first
  scroll_view_query_string = options[:scroll_view] || "android.widget.AbsListView index:0"

  unless direction == :up || direction == :down
    raise "Invalid direction '#{direction}'. Only upwards and downwards scrolling is supported"
  end

  touch(spinner_query_string)

  change_direction = false

  wait_for({retry_frequency: 0}.merge(options)) do
    if query(item_query_string).empty?
      scroll(scroll_view_query_string, direction)

      if change_direction
        direction = direction == :up ? :down : :up
        change_direction = false
      else
        # Because getLastVisiblePosition returns the last element even though it is not visible,
        # we have to scroll one more time to make sure we do not change direction before the last
        # element is fully visible
        if direction == :down
          change_direction = true if query(scroll_view_query_string, :getLastVisiblePosition).first+1 == count
        elsif direction == :up
          change_direction = true if query(scroll_view_query_string, :getFirstVisiblePosition).first == 0
        end
      end

      false
    else
      true
    end
  end

  touch(item_query_string)
end

#select_options_menu_item(identifier, options = {}) ⇒ Object



900
901
902
903
# File 'lib/calabash-android/operations.rb', line 900

def select_options_menu_item(identifier, options={})
  press_menu_button
  tap_when_element_exists("DropDownListView * marked:'#{identifier}'", options)
end

#server_versionObject



156
157
158
# File 'lib/calabash-android/operations.rb', line 156

def server_version
  default_device.server_version
end

#set_date(query_string, year_or_datestring, month = nil, day = nil) ⇒ Object



222
223
224
225
226
227
228
229
230
231
232
# File 'lib/calabash-android/operations.rb', line 222

def set_date(query_string, year_or_datestring, month=nil, day=nil)
  wait_for_element_exists(query_string)

  if month.nil? && day.nil? && year_or_datestring.is_a?(String)
    date = Date.parse(year_or_datestring)
    set_date(query_string, date.year, date.month, date.day)
  else
    year = year_or_datestring
    query(query_string, updateDate: [year, month-1, day])
  end
end

#set_default_device(device) ⇒ Object



65
66
67
# File 'lib/calabash-android/operations.rb', line 65

def set_default_device(device)
  @default_device = device
end

#set_gps_coordinates(latitude, longitude) ⇒ Object



168
169
170
# File 'lib/calabash-android/operations.rb', line 168

def set_gps_coordinates(latitude, longitude)
  default_device.set_gps_coordinates(latitude, longitude)
end

#set_gps_coordinates_from_location(location) ⇒ Object



164
165
166
# File 'lib/calabash-android/operations.rb', line 164

def set_gps_coordinates_from_location(location)
  default_device.set_gps_coordinates_from_location(location)
end

#set_preferences(name, hash) ⇒ Object



176
177
178
# File 'lib/calabash-android/operations.rb', line 176

def set_preferences(name, hash)
  default_device.set_preferences(name, hash)
end

#set_text(uiquery, txt) ⇒ Object



855
856
857
858
# File 'lib/calabash-android/operations.rb', line 855

def set_text(uiquery, txt)
  puts "set_text is deprecated. Use enter_text instead"
  enter_text(uiquery, txt)
end

#set_time(query_string, hour_or_timestring, minute = nil) ⇒ Object



234
235
236
237
238
239
240
241
242
243
244
245
# File 'lib/calabash-android/operations.rb', line 234

def set_time(query_string, hour_or_timestring, minute=nil)
  wait_for_element_exists(query_string)

  if minute.nil? && hour_or_timestring.is_a?(String)
    time = Time.parse(hour_or_timestring)
    set_time(query_string, time.hour, time.min)
  else
    hour = hour_or_timestring
    query(query_string, setCurrentHour: hour)
    query(query_string, setCurrentMinute: minute)
  end
end

#shutdown_test_serverObject



139
140
141
# File 'lib/calabash-android/operations.rb', line 139

def shutdown_test_server
  default_device.shutdown_test_server
end

#start_test_server_in_background(options = {}) ⇒ Object



135
136
137
# File 'lib/calabash-android/operations.rb', line 135

def start_test_server_in_background(options={})
  default_device.start_test_server_in_background(options)
end

#step_deprecatedObject



843
844
845
# File 'lib/calabash-android/operations.rb', line 843

def step_deprecated
  puts 'Warning: This predefined step is deprecated.'
end

#swipe(query_string, options = {}) ⇒ Object



956
957
958
# File 'lib/calabash-android/operations.rb', line 956

def swipe(query_string, options={})
  raise 'Swipe not implemented. Use flick or pan instead.'
end

#uninstall_appsObject



114
115
116
117
# File 'lib/calabash-android/operations.rb', line 114

def uninstall_apps
  default_device.uninstall_app(package_name(default_device.test_server_path))
  default_device.uninstall_app(package_name(default_device.app_path))
end

#update_app(app_path) ⇒ Object



110
111
112
# File 'lib/calabash-android/operations.rb', line 110

def update_app(app_path)
  default_device.update_app(app_path)
end

#url_for(method) ⇒ Object



1200
1201
1202
# File 'lib/calabash-android/operations.rb', line 1200

def url_for( method )
  default_device.url_for(method)
end

#view_with_mark_exists(expected_mark) ⇒ Object



1115
1116
1117
# File 'lib/calabash-android/operations.rb', line 1115

def view_with_mark_exists(expected_mark)
  element_exists( "android.view.View marked:'#{expected_mark}'" )
end

#wake_upObject



119
120
121
# File 'lib/calabash-android/operations.rb', line 119

def wake_up
  default_device.wake_up()
end