Class: TestCentricity::AppUIElement

Inherits:
Object
  • Object
show all
Includes:
Test::Unit::Assertions
Defined in:
lib/testcentricity/app_elements/app_element_helper.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, parent, locator, context) ⇒ AppUIElement

Returns a new instance of AppUIElement.



9
10
11
12
13
14
15
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 9

def initialize(name, parent, locator, context)
  @name       = name
  @parent     = parent
  @locator    = locator
  @context    = context
  @type       = nil
end

Instance Attribute Details

#context ⇒ Object (readonly)

Returns the value of attribute context.



7
8
9
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 7

def context
  @context
end

#locator ⇒ Object (readonly)

Returns the value of attribute locator.



7
8
9
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 7

def locator
  @locator
end

#name ⇒ Object (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 7

def name
  @name
end

#parent ⇒ Object (readonly)

Returns the value of attribute parent.



7
8
9
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 7

def parent
  @parent
end

#type ⇒ Object (readonly)

Returns the value of attribute type.



7
8
9
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 7

def type
  @type
end

Instance Method Details

#clear ⇒ Object



70
71
72
73
74
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 70

def clear
  obj = element
  object_not_found_exception(obj)
  obj.clear
end

#click ⇒ Object



29
30
31
32
33
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 29

def click
  obj = element
  object_not_found_exception(obj)
  obj.click
end

#disabled? ⇒ Boolean

Returns:

  • (Boolean)


136
137
138
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 136

def disabled?
  !enabled?
end

#double_tap ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 44

def double_tap
  obj = element
  object_not_found_exception(obj)
  x = obj.location.x
  y = obj.location.y
  tap_action = Appium::TouchAction.new.double_tap(element: obj, x: x, y: y)
  tap_action.perform
end

#enabled? ⇒ Boolean

Returns:

  • (Boolean)


130
131
132
133
134
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 130

def enabled?
  obj = element
  object_not_found_exception(obj)
  obj.enabled?
end

#exists? ⇒ Boolean

Returns:

  • (Boolean)


110
111
112
113
114
115
116
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 110

def exists?
  begin
    element.displayed?
  rescue
    false
  end
end

#get_attribute(attrib) ⇒ Object



152
153
154
155
156
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 152

def get_attribute(attrib)
  obj = element
  object_not_found_exception(obj)
  obj.attribute(attrib)
end

#get_caption ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 91

def get_caption
  obj = element
  object_not_found_exception(obj)
  if AppiumConnect.is_webview?
    case obj.tag_name.downcase
    when 'input', 'select', 'textarea'
      obj.value
    else
      obj.text
    end
  else
    if obj.tag_name == 'XCUIElementTypeNavigationBar'
      obj.attribute('name')
    else
      obj.attribute('label')
    end
  end
end

#get_locator ⇒ Object



21
22
23
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 21

def get_locator
  @locator
end

#get_name ⇒ Object



25
26
27
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 25

def get_name
  @name
end

#get_object_type ⇒ Object



17
18
19
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 17

def get_object_type
  @type
end

#get_value ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 76

def get_value
  obj = element
  object_not_found_exception(obj)
  if AppiumConnect.is_webview?
    case obj.tag_name.downcase
    when 'input', 'select', 'textarea'
      obj.value
    else
      obj.text
    end
  else
    obj.value
  end
end

#height ⇒ Integer

Return height of object.

Examples:

button_height = my_button.height

Returns:

  • (Integer)


261
262
263
264
265
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 261

def height
  obj = element
  object_not_found_exception(obj)
  obj.size.height
end

#hidden? ⇒ Boolean

Returns:

  • (Boolean)


126
127
128
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 126

def hidden?
  !visible?
end

#scroll(direction) ⇒ Object



291
292
293
294
295
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 291

def scroll(direction)
  obj = element
  object_not_found_exception(obj)
  execute_script('mobile: scroll', direction: direction.to_s, element: obj)
end

#selected? ⇒ Boolean

Returns:

  • (Boolean)


140
141
142
143
144
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 140

def selected?
  obj = element
  object_not_found_exception(obj)
  obj.selected?
end

#send_keys(value) ⇒ Object



64
65
66
67
68
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 64

def send_keys(value)
  obj = element
  object_not_found_exception(obj)
  obj.send_keys(value)
end

#set(value) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 53

def set(value)
  obj = element
  object_not_found_exception(obj)
  if value.is_a?(Array)
    obj.send_keys(value[0])
    obj.send_keys(value[1])
  elsif value.is_a?(String)
    obj.send_keys(value)
  end
end

#swipe(direction) ⇒ Object



297
298
299
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 297

def swipe(direction)
  execute_script('mobile: swipe', direction: direction.to_s)
end

#tag_name ⇒ Object



146
147
148
149
150
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 146

def tag_name
  obj = element
  object_not_found_exception(obj)
  obj.tag_name
end

#tap ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 35

def tap
  obj = element
  object_not_found_exception(obj)
  x = obj.location.x
  y = obj.location.y
  tap_action = Appium::TouchAction.new.tap(element: obj, x: x, y: y)
  tap_action.perform
end

#visible? ⇒ Boolean

Returns:

  • (Boolean)


118
119
120
121
122
123
124
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 118

def visible?
  if exists?
    element.displayed?
  else
    false
  end
end

#wait_until_exists(seconds = nil) ⇒ Object

Wait until the object exists, or until the specified wait time has expired. If the wait time is nil, then the wait time will be Environ.default_max_wait_time.

Examples:

run_button.wait_until_exists(0.5)

Parameters:

  • seconds (Integer or Float) (defaults to: nil) —

    wait time in seconds



165
166
167
168
169
170
171
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 165

def wait_until_exists(seconds = nil)
  timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { exists? }
rescue
  raise "Could not find UI #{object_ref_message} after #{timeout} seconds" unless exists?
end

#wait_until_gone(seconds = nil) ⇒ Object

Wait until the object no longer exists, or until the specified wait time has expired. If the wait time is nil, then the wait time will be Environ.default_max_wait_time.

Examples:

logout_button.wait_until_gone(5)

Parameters:

  • seconds (Integer or Float) (defaults to: nil) —

    wait time in seconds



180
181
182
183
184
185
186
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 180

def wait_until_gone(seconds = nil)
  timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { !exists? }
rescue
  raise "UI #{object_ref_message} remained visible after #{timeout} seconds" if exists?
end

#wait_until_hidden(seconds = nil) ⇒ Object

Wait until the object is hidden, or until the specified wait time has expired. If the wait time is nil, then the wait time will be Environ.default_max_wait_time.

Examples:

run_button.wait_until_hidden(10)

Parameters:

  • seconds (Integer or Float) (defaults to: nil) —

    wait time in seconds



210
211
212
213
214
215
216
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 210

def wait_until_hidden(seconds = nil)
  timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { hidden? }
rescue
  raise "UI #{object_ref_message} remained visible after #{timeout} seconds" if visible?
end

#wait_until_value_changes(seconds = nil) ⇒ Object

Wait until the object's value changes to a different value, or until the specified wait time has expired. If the wait time is nil, then the wait time will be Environ.default_max_wait_time.

Examples:

basket_grand_total_label.wait_until_value_changes(5)

Parameters:

  • seconds (Integer or Float) (defaults to: nil) —

    wait time in seconds



240
241
242
243
244
245
246
247
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 240

def wait_until_value_changes(seconds = nil)
  value = get_value
  timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { get_value != value }
rescue
  raise "Value of UI #{object_ref_message} failed to change from '#{value}' after #{timeout} seconds" if get_value == value
end

#wait_until_value_is(value, seconds = nil) ⇒ Object

Wait until the object's value equals the specified value, or until the specified wait time has expired. If the wait time is nil, then the wait time will be Environ.default_max_wait_time.

Examples:

card_authorized_label.wait_until_value_is(5, 'Card authorized')

Parameters:

  • seconds (Integer or Float) (defaults to: nil) —

    wait time in seconds



225
226
227
228
229
230
231
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 225

def wait_until_value_is(value, seconds = nil)
  timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { get_value == value }
rescue
  raise "Value of UI #{object_ref_message} failed to equal '#{value}' after #{timeout} seconds" unless get_value == value
end

#wait_until_visible(seconds = nil) ⇒ Object

Wait until the object is visible, or until the specified wait time has expired. If the wait time is nil, then the wait time will be Environ.default_max_wait_time.

Examples:

run_button.wait_until_visible(0.5)

Parameters:

  • seconds (Integer or Float) (defaults to: nil) —

    wait time in seconds



195
196
197
198
199
200
201
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 195

def wait_until_visible(seconds = nil)
  timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { visible? }
rescue
  raise "Could not find UI #{object_ref_message} after #{timeout} seconds" unless visible?
end

#width ⇒ Object



249
250
251
252
253
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 249

def width
  obj = element
  object_not_found_exception(obj)
  obj.size.width
end

#x_loc ⇒ Integer

Return x coordinate of object's location.

Examples:

button_x = my_button.x

Returns:

  • (Integer)


273
274
275
276
277
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 273

def x_loc
  obj = element
  object_not_found_exception(obj)
  obj.location.x
end

#y_loc ⇒ Integer

Return y coordinate of object's location.

Examples:

button_y = my_button.y

Returns:

  • (Integer)


285
286
287
288
289
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 285

def y_loc
  obj = element
  object_not_found_exception(obj)
  obj.location.y
end