module Calabash::Android::TouchHelpers
Public Instance Methods
double_tap(query_string, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 39 def double_tap(query_string, options={}) if query_result?(query_string) center_x, center_y = find_coordinate(query_string, options) perform_action("double_tap_coordinate", center_x, center_y) else execute_gesture(Gesture.with_parameters(Gesture.double_tap(options), {query_string: query_string}.merge(options))) end end
drag(*args)
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 69 def drag(*args) pan(*args) end
execute_gesture(multi_touch_gesture)
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 6 def execute_gesture(multi_touch_gesture) result = JSON.parse(http("/gesture", JSON.parse(multi_touch_gesture.to_json), read_timeout: multi_touch_gesture.timeout+10)) if result['outcome'] != 'SUCCESS' raise "Failed to perform gesture. #{result['reason']}" end nil end
find_coordinate(uiquery, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 125 def find_coordinate(uiquery, options={}) raise "Cannot find nil" unless uiquery element = execute_uiquery(uiquery) raise "No elements found. Query: #{uiquery}" if element.nil? x = element["rect"]["center_x"] y = element["rect"]["center_y"] if options[:offset] x += options[:offset][:x] || 0 y += options[:offset][:y] || 0 end [x, y] end
flick(query_string, direction, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 109 def flick(query_string, direction, options={}) execute_gesture(Gesture.with_parameters(Gesture.swipe(direction, {flick: true}.merge(options)), {query_string: query_string}.merge(options))) end
flick_down(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 105 def flick_down(options={}) flick("* id:'content'", :down, options) end
flick_left(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 93 def flick_left(options={}) flick("DecorView", :left, options) end
flick_right(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 97 def flick_right(options={}) flick("DecorView", :right, options) end
flick_up(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 101 def flick_up(options={}) flick("* id:'content'", :up, options) end
long_press(query_string, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 49 def long_press(query_string, options={}) if query_result?(query_string) center_x, center_y = find_coordinate(query_string, options) length = options[:length] perform_action("long_press_coordinate", center_x, center_y, *(length unless length.nil?)) else length = options[:length] if length puts "Using the length key is deprecated. Use 'time' (in seconds) instead." options[:time] = length/1000.0 end options[:time] ||= 1 touch(query_string, options) end end
long_press_when_element_exists(query_string, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 153 def long_press_when_element_exists(query_string, options={}) options.merge!({action: lambda {|q| long_press(q, options)}}) if options[:scroll] == true scroll_to(query_string, options) else when_element_exists(query_string, options) end end
pan(query_string, direction, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 89 def pan(query_string, direction, options={}) execute_gesture(Gesture.with_parameters(Gesture.swipe(direction, options), {query_string: query_string}.merge(options))) end
pan_down(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 85 def pan_down(options={}) pan("* id:'content'", :down, options) end
pan_left(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 73 def pan_left(options={}) pan("DecorView", :left, options) end
pan_right(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 77 def pan_right(options={}) pan("DecorView", :right, options) end
pan_up(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 81 def pan_up(options={}) pan("* id:'content'", :up, options) end
pinch(query_string, direction, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 121 def pinch(query_string, direction, options={}) execute_gesture(Gesture.with_parameters(Gesture.pinch(direction, options), {query_string: query_string}.merge(options))) end
pinch_in(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 117 def pinch_in(options={}) pinch("* id:'content'", :in, options) end
pinch_out(options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 113 def pinch_out(options={}) pinch("* id:'content'", :out, options) end
query_result?(uiquery)
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 163 def query_result?(uiquery) element = if uiquery.is_a?(Array) uiquery.first else uiquery end element.is_a?(Hash) && element.has_key?('rect') && element['rect'].has_key?('center_x') && element['rect'].has_key?('center_y') end
tap(mark, *args)
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 16 def tap(mark, *args) puts "Warning: The method tap is deprecated. Use tap_mark instead. In later Calabash versions we will change the semantics of `tap` to take a general query." tap_mark(mark, *args) end
tap_mark(mark, *args)
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 22 def tap_mark(mark, *args) touch("* marked:'#{mark}'", *args) end
tap_when_element_exists(query_string, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 143 def tap_when_element_exists(query_string, options={}) options.merge!({action: lambda {|q| touch(q, options)}}) if options[:scroll] == true scroll_to(query_string, options) else when_element_exists(query_string, options) end end
touch(query_string, options={})
click to toggle source
# File lib/calabash-android/touch_helpers.rb, line 26 def touch(query_string, options={}) if query_result?(query_string) center_x, center_y = find_coordinate(query_string, options) perform_action("touch_coordinate", center_x, center_y) else if query_string.nil? && (options.nil? || options.empty?) raise "Can't touch nil" end execute_gesture(Gesture.with_parameters(Gesture.tap(options), {query_string: query_string}.merge(options))) end end