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.

Parameters:

  • value (String, Integer)

    the value to exactly match.

Returns:



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.

Parameters:

  • value (String)

    the value to match exactly

Returns:



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.

Parameters:

  • value (String) (defaults to: false)

    the value to search for

Returns:



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.

Parameters:

  • value (String)

    the value to match exactly

Returns:



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.

Returns:



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.

Returns:



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.

Parameters:

  • text (String)

    the text or resourceId to search for in the text value and content description

Returns:

  • (Element)

    the element scrolled to



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.

Parameters:

  • text (String)

    the text or resourceId to search for in the text value and content description

Returns:

  • (Element)

    the element scrolled to



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