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.
-
#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, #enter_text, #escape_quotes, #has_text?, #keyboard_enter_char, #keyboard_enter_text
#xamarin_test_cloud?
Instance Method Details
#app_to_background(secs) ⇒ Object
1092
1093
1094
|
# File 'lib/calabash-android/operations.rb', line 1092
def app_to_background(secs)
ni
end
|
#backdoor(method_name, arguments = [], options = {}) ⇒ Object
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
|
# File 'lib/calabash-android/operations.rb', line 1150
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
949
950
951
|
# File 'lib/calabash-android/operations.rb', line 949
def cell_swipe(options={})
ni
end
|
#check_element_does_not_exist(query) ⇒ Object
1114
1115
1116
1117
1118
|
# File 'lib/calabash-android/operations.rb', line 1114
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
1108
1109
1110
1111
1112
|
# File 'lib/calabash-android/operations.rb', line 1108
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
1120
1121
1122
|
# File 'lib/calabash-android/operations.rb', line 1120
def check_view_with_mark_exists(expected_mark)
check_element_exists( "view marked:'#{expected_mark}'" )
end
|
#classes(query_string, *args) ⇒ Object
236
237
238
|
# File 'lib/calabash-android/operations.rb', line 236
def classes(query_string, *args)
query(query_string, :class, *args)
end
|
#clear_app_data ⇒ Object
112
113
114
|
# File 'lib/calabash-android/operations.rb', line 112
def clear_app_data
default_device.clear_app_data
end
|
#clear_preferences(name) ⇒ Object
169
170
171
|
# File 'lib/calabash-android/operations.rb', line 169
def clear_preferences(name)
default_device.clear_preferences(name)
end
|
#client_version ⇒ Object
141
142
143
|
# File 'lib/calabash-android/operations.rb', line 141
def client_version
default_device.client_version
end
|
#connect_to_test_server ⇒ Object
255
256
257
258
259
|
# File 'lib/calabash-android/operations.rb', line 255
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
31
32
33
|
# File 'lib/calabash-android/operations.rb', line 31
def current_activity
`#{default_device.adb_command} shell dumpsys window windows`.each_line.grep(/mFocusedApp.+[\.\/]([^.\s\/\}]+)/){$1}.first
end
|
#default_device ⇒ Object
47
48
49
50
51
52
|
# File 'lib/calabash-android/operations.rb', line 47
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
81
82
83
84
85
|
# File 'lib/calabash-android/operations.rb', line 81
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
261
262
263
264
265
|
# File 'lib/calabash-android/operations.rb', line 261
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
953
954
955
|
# File 'lib/calabash-android/operations.rb', line 953
def done
ni
end
|
#each_item(opts = {:query => "android.widget.ListView", :post_scroll => 0.2}, &block) ⇒ Object
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
# File 'lib/calabash-android/operations.rb', line 195
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
1096
1097
1098
|
# File 'lib/calabash-android/operations.rb', line 1096
def element_does_not_exist(uiquery)
query(uiquery).empty?
end
|
#element_exists(uiquery) ⇒ Object
1100
1101
1102
|
# File 'lib/calabash-android/operations.rb', line 1100
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
1125
1126
1127
|
# File 'lib/calabash-android/operations.rb', line 1125
def element_is_not_hidden(uiquery)
ni
end
|
#execute_uiquery(uiquery) ⇒ Object
817
818
819
820
821
822
823
824
825
826
827
828
829
830
|
# File 'lib/calabash-android/operations.rb', line 817
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
149
150
151
|
# File 'lib/calabash-android/operations.rb', line 149
def fail(msg="Error. Check log for details.", options={:prefix => nil, :name => nil, :label => nil})
screenshot_and_raise(msg, options)
end
|
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
|
# File 'lib/calabash-android/operations.rb', line 957
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
191
192
193
|
# File 'lib/calabash-android/operations.rb', line 191
def flash(query_string)
map(query_string, :flash)
end
|
#get_preferences(name) ⇒ Object
161
162
163
|
# File 'lib/calabash-android/operations.rb', line 161
def get_preferences(name)
default_device.get_preferences(name)
end
|
#hide_soft_keyboard ⇒ Object
813
814
815
|
# File 'lib/calabash-android/operations.rb', line 813
def hide_soft_keyboard
perform_action('hide_soft_keyboard')
end
|
#html(q) ⇒ Object
840
841
842
|
# File 'lib/calabash-android/operations.rb', line 840
def html(q)
query(q).map {|e| e['html']}
end
|
#http(path, data = {}, options = {}) ⇒ Object
836
837
838
|
# File 'lib/calabash-android/operations.rb', line 836
def http(path, data = {}, options = {})
default_device.http(path, data, options)
end
|
#install_app(app_path) ⇒ Object
95
96
97
|
# File 'lib/calabash-android/operations.rb', line 95
def install_app(app_path)
default_device.install_app(app_path)
end
|
#interpolate(recording, options = {}) ⇒ Object
1138
1139
1140
|
# File 'lib/calabash-android/operations.rb', line 1138
def interpolate(recording, options={})
ni
end
|
#label(uiquery) ⇒ Object
800
801
802
|
# File 'lib/calabash-android/operations.rb', line 800
def label(uiquery)
ni
end
|
#load_playback_data(recording, options = {}) ⇒ Object
1130
1131
1132
|
# File 'lib/calabash-android/operations.rb', line 1130
def load_playback_data(recording,options={})
ni
end
|
#log(message) ⇒ Object
35
36
37
|
# File 'lib/calabash-android/operations.rb', line 35
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
39
40
41
42
43
44
45
|
# File 'lib/calabash-android/operations.rb', line 39
def macro(txt)
if self.respond_to?(:step)
step(txt)
else
Then(txt)
end
end
|
#make_http_request(options) ⇒ Object
1181
1182
1183
|
# File 'lib/calabash-android/operations.rb', line 1181
def make_http_request(options)
default_device.make_http_request(options)
end
|
#map(query, method_name, *method_args) ⇒ Object
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
|
# File 'lib/calabash-android/operations.rb', line 1162
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
240
241
242
|
# File 'lib/calabash-android/operations.rb', line 240
def ni
raise "Not yet implemented."
end
|
#page(clz, *args) ⇒ Object
simple page object helper
248
249
250
|
# File 'lib/calabash-android/operations.rb', line 248
def page(clz, *args)
clz.new(self, *args)
end
|
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/calabash-android/operations.rb', line 64
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
|
58
59
60
61
62
|
# File 'lib/calabash-android/operations.rb', line 58
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
1134
1135
1136
|
# File 'lib/calabash-android/operations.rb', line 1134
def playback(recording, options={})
ni
end
|
861
862
863
|
# File 'lib/calabash-android/operations.rb', line 861
def press_back_button
press_button('KEYCODE_BACK')
end
|
857
858
859
|
# File 'lib/calabash-android/operations.rb', line 857
def press_button(key)
perform_action('press_key', key)
end
|
869
870
871
|
# File 'lib/calabash-android/operations.rb', line 869
def press_down_button
press_button('KEYCODE_DPAD_DOWN')
end
|
885
886
887
|
# File 'lib/calabash-android/operations.rb', line 885
def press_enter_button
press_button('KEYCODE_ENTER')
end
|
877
878
879
|
# File 'lib/calabash-android/operations.rb', line 877
def press_left_button
press_button('KEYCODE_DPAD_LEFT')
end
|
865
866
867
|
# File 'lib/calabash-android/operations.rb', line 865
def
press_button('KEYCODE_MENU')
end
|
881
882
883
|
# File 'lib/calabash-android/operations.rb', line 881
def press_right_button
press_button('KEYCODE_DPAD_RIGHT')
end
|
873
874
875
|
# File 'lib/calabash-android/operations.rb', line 873
def press_up_button
press_button('KEYCODE_DPAD_UP')
end
|
849
850
851
852
853
854
855
|
# File 'lib/calabash-android/operations.rb', line 849
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
116
117
118
|
# File 'lib/calabash-android/operations.rb', line 116
def pull(remote, local)
default_device.pull(remote, local)
end
|
#push(local, remote) ⇒ Object
120
121
122
|
# File 'lib/calabash-android/operations.rb', line 120
def push(local, remote)
default_device.push(local, remote)
end
|
#query(uiquery, *args) ⇒ Object
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
# File 'lib/calabash-android/operations.rb', line 173
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
1142
1143
1144
|
# File 'lib/calabash-android/operations.rb', line 1142
def record_begin
ni
end
|
#record_end(file_name) ⇒ Object
1146
1147
1148
|
# File 'lib/calabash-android/operations.rb', line 1146
def record_end(file_name)
ni
end
|
#reinstall_apps ⇒ Object
87
88
89
|
# File 'lib/calabash-android/operations.rb', line 87
def reinstall_apps
default_device.reinstall_apps
end
|
#reinstall_test_server ⇒ Object
91
92
93
|
# File 'lib/calabash-android/operations.rb', line 91
def reinstall_test_server
default_device.reinstall_test_server
end
|
#removed_actions ⇒ Object
77
78
79
|
# File 'lib/calabash-android/operations.rb', line 77
def removed_actions
@removed_actions ||= File.readlines(File.join(File.dirname(__FILE__), 'removed_actions.txt')).map(&:chomp)
end
|
#rotate(dir) ⇒ Object
1088
1089
1090
|
# File 'lib/calabash-android/operations.rb', line 1088
def rotate(dir)
ni
end
|
#screenshot(options = {:prefix => nil, :name => nil}) ⇒ Object
137
138
139
|
# File 'lib/calabash-android/operations.rb', line 137
def screenshot(options={:prefix => nil, :name => nil})
default_device.screenshot(options)
end
|
#screenshot_and_raise(msg, options = nil) ⇒ Object
804
805
806
807
808
809
810
811
|
# File 'lib/calabash-android/operations.rb', line 804
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
132
133
134
135
|
# File 'lib/calabash-android/operations.rb', line 132
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
|
989
990
991
992
993
994
995
996
997
998
999
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
|
# File 'lib/calabash-android/operations.rb', line 989
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
|
985
986
987
|
# File 'lib/calabash-android/operations.rb', line 985
def scroll_down(options={})
scroll(find_scrollable_view(options), :down)
end
|
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
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
|
# File 'lib/calabash-android/operations.rb', line 1036
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
|
1083
1084
1085
1086
|
# File 'lib/calabash-android/operations.rb', line 1083
def scroll_to_row(uiquery,number)
query(uiquery, {:smoothScrollToPosition => number})
puts "TODO:detect end of scroll - use sleep for now"
end
|
981
982
983
|
# File 'lib/calabash-android/operations.rb', line 981
def scroll_up(options={})
scroll(find_scrollable_view(options), :up)
end
|
894
895
896
897
898
899
900
901
902
|
# File 'lib/calabash-android/operations.rb', line 894
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
904
905
906
907
908
909
910
911
912
913
914
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
|
# File 'lib/calabash-android/operations.rb', line 904
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
|
889
890
891
892
|
# File 'lib/calabash-android/operations.rb', line 889
def (identifier, options={})
tap_when_element_exists("DropDownListView * marked:'#{identifier}'", options)
end
|
#server_version ⇒ Object
145
146
147
|
# File 'lib/calabash-android/operations.rb', line 145
def server_version
default_device.server_version
end
|
#set_date(query_string, year_or_datestring, month = nil, day = nil) ⇒ Object
211
212
213
214
215
216
217
218
219
220
221
|
# File 'lib/calabash-android/operations.rb', line 211
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
54
55
56
|
# File 'lib/calabash-android/operations.rb', line 54
def set_default_device(device)
@default_device = device
end
|
#set_gps_coordinates(latitude, longitude) ⇒ Object
157
158
159
|
# File 'lib/calabash-android/operations.rb', line 157
def set_gps_coordinates(latitude, longitude)
default_device.set_gps_coordinates(latitude, longitude)
end
|
#set_gps_coordinates_from_location(location) ⇒ Object
153
154
155
|
# File 'lib/calabash-android/operations.rb', line 153
def set_gps_coordinates_from_location(location)
default_device.set_gps_coordinates_from_location(location)
end
|
#set_preferences(name, hash) ⇒ Object
165
166
167
|
# File 'lib/calabash-android/operations.rb', line 165
def set_preferences(name, hash)
default_device.set_preferences(name, hash)
end
|
#set_text(uiquery, txt) ⇒ Object
844
845
846
847
|
# File 'lib/calabash-android/operations.rb', line 844
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
223
224
225
226
227
228
229
230
231
232
233
234
|
# File 'lib/calabash-android/operations.rb', line 223
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
128
129
130
|
# File 'lib/calabash-android/operations.rb', line 128
def shutdown_test_server
default_device.shutdown_test_server
end
|
#start_test_server_in_background(options = {}) ⇒ Object
124
125
126
|
# File 'lib/calabash-android/operations.rb', line 124
def start_test_server_in_background(options={})
default_device.start_test_server_in_background(options)
end
|
#step_deprecated ⇒ Object
832
833
834
|
# File 'lib/calabash-android/operations.rb', line 832
def step_deprecated
puts 'Warning: This predefined step is deprecated.'
end
|
#swipe(query_string, options = {}) ⇒ Object
945
946
947
|
# File 'lib/calabash-android/operations.rb', line 945
def swipe(query_string, options={})
raise 'Swipe not implemented. Use flick or pan instead.'
end
|
#uninstall_apps ⇒ Object
103
104
105
106
|
# File 'lib/calabash-android/operations.rb', line 103
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
99
100
101
|
# File 'lib/calabash-android/operations.rb', line 99
def update_app(app_path)
default_device.update_app(app_path)
end
|
#url_for(method) ⇒ Object
1177
1178
1179
|
# File 'lib/calabash-android/operations.rb', line 1177
def url_for( method )
default_device.url_for(method)
end
|
#view_with_mark_exists(expected_mark) ⇒ Object
1104
1105
1106
|
# File 'lib/calabash-android/operations.rb', line 1104
def view_with_mark_exists(expected_mark)
element_exists( "android.view.View marked:'#{expected_mark}'" )
end
|
#wake_up ⇒ Object
108
109
110
|
# File 'lib/calabash-android/operations.rb', line 108
def wake_up
default_device.wake_up()
end
|