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)


139
140
141
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 139

def disabled?
  !enabled?
end

#double_tap ⇒ Object



42
43
44
45
46
47
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 42

def double_tap
  obj = element
  object_not_found_exception(obj)
  actions = Appium::TouchAction.new
  actions.double_tap(element: obj).perform
end

#enabled? ⇒ Boolean

Returns:

  • (Boolean)


133
134
135
136
137
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 133

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

#exists? ⇒ Boolean

Returns:

  • (Boolean)


113
114
115
116
117
118
119
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 113

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

#get_attribute(attrib) ⇒ Object



155
156
157
158
159
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 155

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
109
110
111
# 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
  elsif Environ.device_os == :ios
    case obj.tag_name
    when 'XCUIElementTypeNavigationBar'
      obj.attribute('name')
    else
      obj.attribute('label')
    end
  else
    obj.text
  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)


267
268
269
270
271
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 267

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

#hidden? ⇒ Boolean

Returns:

  • (Boolean)


129
130
131
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 129

def hidden?
  !visible?
end

#scroll(direction) ⇒ Object



297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 297

def scroll(direction)
  obj = element
  object_not_found_exception(obj)
  if Environ.device_os == :ios
    execute_script('mobile: scroll', direction: direction.to_s, element: obj)
  else
    case direction
    when :down
      x = obj.size.width.to_i / 2
      bottom = obj.size.height
      bottom = window_size[:height].to_i if bottom > window_size[:height]
      start_pt = [x, bottom]
      delta_pt = [0, 0 - (bottom - 20)]

    when :up
      x = obj.size.width.to_i / 2
      top = obj.location.y - (obj.size.height / 2)
      top = 0 if top < 0
      start_pt = [x, top]
      delta_pt = [0, obj.size.height / 2]
    end
    puts "Swipe start_pt = #{start_pt} / delta_pt = #{delta_pt}" if ENV['DEBUG']
    Appium::TouchAction.new.swipe(start_x: start_pt[0], start_y: start_pt[1], delta_x: delta_pt[0], delta_y: delta_pt[1]).perform
  end
end

#selected? ⇒ Boolean

Returns:

  • (Boolean)


143
144
145
146
147
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 143

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



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

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

#swipe(direction) ⇒ Object



323
324
325
326
327
328
329
330
331
332
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 323

def swipe(direction)
  obj = element
  object_not_found_exception(obj)
  if Environ.device_os == :ios
    execute_script('mobile: swipe', direction: direction.to_s, element: obj)
  else
    actions = Appium::TouchAction.new
    actions.scroll(element: obj).perform
  end
end

#tag_name ⇒ Object



149
150
151
152
153
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 149

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

#tap ⇒ Object



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

def tap
  obj = element
  object_not_found_exception(obj)
  actions = Appium::TouchAction.new
  actions.tap(element: obj).perform
end

#visible? ⇒ Boolean

Returns:

  • (Boolean)


121
122
123
124
125
126
127
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 121

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



168
169
170
171
172
173
174
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 168

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



183
184
185
186
187
188
189
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 183

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



213
214
215
216
217
218
219
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 213

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



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

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('Card authorized', 5)
  or
total_weight_field.wait_until_value_is({ :greater_than => '250' }, 5)

Parameters:

  • value (String or Hash) —

    value expected or comparison hash

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

    wait time in seconds



231
232
233
234
235
236
237
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 231

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 { compare(value, get_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



198
199
200
201
202
203
204
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 198

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



255
256
257
258
259
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 255

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)


279
280
281
282
283
# File 'lib/testcentricity/app_elements/app_element_helper.rb', line 279

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)


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

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