Module: Calabash::Android::Operations
Defined Under Namespace
Classes: Device
Constant Summary
Constants included
from WaitHelpers
WaitHelpers::DEFAULT_OPTS
Instance Method Summary
collapse
-
#app_to_background(secs) ⇒ Object
-
#backdoor(method_name, arguments = [], options = {}) ⇒ Object
-
#cell_swipe(options = {}) ⇒ Object
-
#check_element_does_not_exist(query) ⇒ Object
-
#check_element_exists(query) ⇒ Object
-
#check_view_with_mark_exists(expected_mark) ⇒ Object
-
#classes(query_string, *args) ⇒ Object
-
#clear_app_data ⇒ Object
-
#clear_preferences(name) ⇒ Object
-
#client_version ⇒ Object
-
#connect_to_test_server ⇒ Object
-
#current_activity ⇒ Object
-
#default_device ⇒ Object
-
#deprecated_actions ⇒ Object
-
#disconnect_from_test_server ⇒ Object
-
#done ⇒ Object
-
#each_item(opts = {:query => "android.widget.ListView", :post_scroll => 0.2}, &block) ⇒ Object
-
#element_does_not_exist(uiquery) ⇒ Object
-
#element_exists(uiquery) ⇒ Object
-
#element_is_not_hidden(uiquery) ⇒ Object
a better name would be element_exists_and_is_not_hidden.
-
#evaluate_javascript(query_string, javascript, opt = {}) ⇒ Object
-
#execute_uiquery(uiquery) ⇒ Object
-
#fail(msg = "Error. Check log for details.", options = {:prefix => nil, :name => nil, :label => nil}) ⇒ Object
-
#find_scrollable_view(options = {}) ⇒ Object
-
#flash(query_string) ⇒ Object
-
#get_preferences(name) ⇒ Object
-
#hide_soft_keyboard ⇒ Object
-
#html(q) ⇒ Object
-
#http(path, data = {}, options = {}) ⇒ Object
-
#install_app(app_path) ⇒ Object
-
#interpolate(recording, options = {}) ⇒ Object
-
#label(uiquery) ⇒ Object
-
#load_playback_data(recording, options = {}) ⇒ Object
-
#log(message) ⇒ Object
-
#macro(txt) ⇒ Object
-
#make_http_request(options) ⇒ Object
-
#map(query, method_name, *method_args) ⇒ Object
-
#ni ⇒ Object
-
#page(clz, *args) ⇒ Object
simple page object helper.
-
#perform_action(action, *arguments) ⇒ Object
-
#performAction(action, *arguments) ⇒ Object
-
#playback(recording, options = {}) ⇒ Object
-
#press_back_button ⇒ Object
-
#press_button(key) ⇒ Object
-
#press_down_button ⇒ Object
-
#press_enter_button ⇒ Object
-
#press_left_button ⇒ Object
-
#press_menu_button ⇒ Object
-
#press_right_button ⇒ Object
-
#press_up_button ⇒ Object
-
#press_user_action_button(action_name = nil) ⇒ Object
-
#pull(remote, local) ⇒ Object
-
#push(local, remote) ⇒ Object
-
#query(uiquery, *args) ⇒ Object
-
#record_begin ⇒ Object
-
#record_end(file_name) ⇒ Object
-
#reinstall_apps ⇒ Object
-
#reinstall_test_server ⇒ Object
-
#removed_actions ⇒ Object
-
#rotate(dir) ⇒ Object
-
#screenshot(options = {:prefix => nil, :name => nil}) ⇒ Object
-
#screenshot_and_raise(msg, options = nil) ⇒ Object
-
#screenshot_embed(options = {:prefix => nil, :name => nil, :label => nil}) ⇒ Object
-
#scroll(query_string, direction) ⇒ Object
-
#scroll_down(options = {}) ⇒ Object
-
#scroll_to(query_string, options = {}) ⇒ Object
-
#scroll_to_row(uiquery, number) ⇒ Object
-
#scroll_up(options = {}) ⇒ Object
-
#select_context_menu_item(view_uiquery, menu_item_query_string) ⇒ Object
-
#select_item_from_spinner(item_query_string, options = {}) ⇒ Object
-
#select_options_menu_item(identifier, options = {}) ⇒ Object
-
#server_version ⇒ Object
-
#set_date(query_string, year_or_datestring, month = nil, day = nil) ⇒ Object
-
#set_default_device(device) ⇒ Object
-
#set_gps_coordinates(latitude, longitude) ⇒ Object
-
#set_gps_coordinates_from_location(location) ⇒ Object
-
#set_preferences(name, hash) ⇒ Object
-
#set_text(uiquery, txt) ⇒ Object
-
#set_time(query_string, hour_or_timestring, minute = nil) ⇒ Object
-
#shutdown_test_server ⇒ Object
-
#start_test_server_in_background(options = {}) ⇒ Object
-
#step_deprecated ⇒ Object
-
#swipe(query_string, options = {}) ⇒ Object
-
#uninstall_apps ⇒ Object
-
#update_app(app_path) ⇒ Object
-
#url_for(method) ⇒ Object
-
#view_with_mark_exists(expected_mark) ⇒ Object
-
#wake_up ⇒ Object
#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
#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
#assert_text, #clear_text, #clear_text_in, #enter_text, #escape_quotes, #has_text?, #keyboard_enter_char, #keyboard_enter_text
#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_data ⇒ Object
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_version ⇒ Object
152
153
154
|
# File 'lib/calabash-android/operations.rb', line 152
def client_version
default_device.client_version
end
|
#connect_to_test_server ⇒ Object
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_activity ⇒ Object
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_device ⇒ Object
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_actions ⇒ Object
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_server ⇒ Object
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
|
#done ⇒ Object
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
|
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_keyboard ⇒ Object
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
|
#ni ⇒ Object
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
|
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
|
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
|
872
873
874
|
# File 'lib/calabash-android/operations.rb', line 872
def press_back_button
press_button('KEYCODE_BACK')
end
|
868
869
870
|
# File 'lib/calabash-android/operations.rb', line 868
def press_button(key)
perform_action('press_key', key)
end
|
880
881
882
|
# File 'lib/calabash-android/operations.rb', line 880
def press_down_button
press_button('KEYCODE_DPAD_DOWN')
end
|
896
897
898
|
# File 'lib/calabash-android/operations.rb', line 896
def press_enter_button
press_button('KEYCODE_ENTER')
end
|
888
889
890
|
# File 'lib/calabash-android/operations.rb', line 888
def press_left_button
press_button('KEYCODE_DPAD_LEFT')
end
|
876
877
878
|
# File 'lib/calabash-android/operations.rb', line 876
def
press_button('KEYCODE_MENU')
end
|
892
893
894
|
# File 'lib/calabash-android/operations.rb', line 892
def press_right_button
press_button('KEYCODE_DPAD_RIGHT')
end
|
884
885
886
|
# File 'lib/calabash-android/operations.rb', line 884
def press_up_button
press_button('KEYCODE_DPAD_UP')
end
|
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_begin ⇒ Object
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_apps ⇒ Object
98
99
100
|
# File 'lib/calabash-android/operations.rb', line 98
def reinstall_apps
default_device.reinstall_apps
end
|
#reinstall_test_server ⇒ Object
102
103
104
|
# File 'lib/calabash-android/operations.rb', line 102
def reinstall_test_server
default_device.reinstall_test_server
end
|
#removed_actions ⇒ Object
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
|
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") 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 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
|
996
997
998
|
# File 'lib/calabash-android/operations.rb', line 996
def scroll_down(options={})
scroll(find_scrollable_view(options), :down)
end
|
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
|
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
|
992
993
994
|
# File 'lib/calabash-android/operations.rb', line 992
def scroll_up(options={})
scroll(find_scrollable_view(options), :up)
end
|
905
906
907
908
909
910
911
912
913
|
# File 'lib/calabash-android/operations.rb', line 905
def (view_uiquery, )
long_press(view_uiquery)
container_class = 'com.android.internal.view.menu.ListMenuItemView'
wait_for_element_exists(container_class)
combined_query_string = "#{container_class} descendant #{}"
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
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
|
900
901
902
903
|
# File 'lib/calabash-android/operations.rb', line 900
def (identifier, options={})
tap_when_element_exists("DropDownListView * marked:'#{identifier}'", options)
end
|
#server_version ⇒ Object
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_server ⇒ Object
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_deprecated ⇒ Object
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_apps ⇒ Object
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_up ⇒ Object
119
120
121
|
# File 'lib/calabash-android/operations.rb', line 119
def wake_up
default_device.wake_up()
end
|