Module: Appium::Android::Espresso::Element

Defined in:
lib/appium_lib/android/espresso/element.rb,
lib/appium_lib/android/espresso/element/button.rb,
lib/appium_lib/android/espresso/element/generic.rb

Instance Method Summary collapse

Instance Method Details

#button(value) ⇒ Button

Find the first button that contains value or by index. If int then the button at that index is returned.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/appium_lib/android/espresso/element/button.rb', line 23

def button(value)
  # Don't use ele_index because that only works on one element type.
  # Android needs to combine button and image button to match iOS.
  if value.is_a? Numeric
    index = value
    raise "#{index} is not a valid index. Must be >= 1" if index <= 0

    # zero index
    _button_visible_selectors_xpath(index: index - 1)
  end

  i = find_elements :xpath, _button_contains_string_xpath(BUTTON, value)
  e = find_elements :xpath, _button_contains_string_xpath(IMAGE_BUTTON, value)

  raise_no_such_element_if_empty(i + e)

  (i + e)[0]
end

#button_exact(value) ⇒ Button

Find the first button that exactly matches value.



77
78
79
80
81
82
83
84
# File 'lib/appium_lib/android/espresso/element/button.rb', line 77

def button_exact(value)
  i = find_elements :xpath, _button_exact_string_xpath(BUTTON, value)
  e = find_elements :xpath, _button_exact_string_xpath(IMAGE_BUTTON, value)

  raise_no_such_element_if_empty(i + e)

  (i + e)[0]
end

#buttons(value = false) ⇒ Array<Button>

Find all buttons containing value. If value is omitted, all buttons are returned.



46
47
48
49
50
51
52
# File 'lib/appium_lib/android/espresso/element/button.rb', line 46

def buttons(value = false)
  return _button_visible_selectors_xpath unless value

  i = find_elements :xpath, _button_contains_string_xpath(BUTTON, value)
  e = find_elements :xpath, _button_contains_string_xpath(IMAGE_BUTTON, value)
  i + e
end

#buttons_exact(value) ⇒ Array<Button>

Find all buttons that exactly match value.



89
90
91
92
93
# File 'lib/appium_lib/android/espresso/element/button.rb', line 89

def buttons_exact(value)
  i = find_elements :xpath, _button_exact_string_xpath(BUTTON, value)
  e = find_elements :xpath, _button_exact_string_xpath(IMAGE_BUTTON, value)
  i + e
end

#first_buttonButton

Find the first button.



56
57
58
# File 'lib/appium_lib/android/espresso/element/button.rb', line 56

def first_button
  _button_visible_selectors_xpath(button_index: 0, image_button_index: 0)
end

#last_buttonButton

Find the last button.



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/appium_lib/android/espresso/element/button.rb', line 62

def last_button
  # uiautomator index doesn't support last
  # and it's 0 indexed
  button_index = tags(::Appium::Android::BUTTON).length
  button_index -= 1 if button_index.positive?
  image_button_index = tags(::Appium::Android::IMAGE_BUTTON).length
  image_button_index -= 1 if image_button_index.positive?

  _button_visible_selectors_xpath(button_index: button_index,
                                  image_button_index: image_button_index)
end

#scroll_to(text) ⇒ Element

Scroll to the first element containing target text or description. Scroll happens upto 30 times in centre of device width.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/appium_lib/android/espresso/element/generic.rb', line 23

def scroll_to(text)
  err = nil
  w_s = window_rect

  (1..30).each do |_count|
    action
      .move_to_location(w_s.width / 2, (w_s.height * 2) / 5) # pointer based magic number
      .pointer_down(:left)
      .move_to_location(0, w_s.height / 5)
      .release
      .perform
    sleep 1 # we must wait finish scrolling

    return text(text)
  rescue StandardError => e
    err = e
  end

  raise err
end

#scroll_to_exact(text) ⇒ Element

Scroll to the first element with the exact target text or description. Scroll happens upto 30 times in centre of device width.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/appium_lib/android/espresso/element/generic.rb', line 48

def scroll_to_exact(text)
  err = nil
  w_s = window_rect

  (1..30).each do |_count|
    action
      .move_to_location(w_s.width / 2, (w_s.height * 2) / 5) # pointer based magic number
      .pointer_down(:left)
      .move_to_location(0, w_s.height / 5)
      .release
      .perform
    sleep 1 # we must wait finish scrolling

    return text_exact(text)
  rescue StandardError => e
    err = e
  end

  raise err
end