Class: TestCentricity::UIElement
- Includes:
- Capybara::DSL, Test::Unit::Assertions
- Defined in:
- lib/testcentricity_web/ui_elements_helper.rb,
lib/testcentricity_web/siebel_open_ui_helper.rb
Direct Known Subclasses
Button, CellElement, CheckBox, FileField, Image, Label, Link, List, ListElement, Radio, SelectList, Table, TextField
Constant Summary collapse
- XPATH_SELECTORS =
['//', '[@', '[contains(@']
- CSS_SELECTORS =
['#', ':nth-child(', ':nth-of-type(', '^=', '$=', '*=']
Instance Attribute Summary collapse
-
#alt_locator ⇒ Object
Returns the value of attribute alt_locator.
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#locator ⇒ Object
readonly
Returns the value of attribute locator.
-
#locator_type ⇒ Object
Returns the value of attribute locator_type.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#parent ⇒ Object
readonly
Returns the value of attribute parent.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Instance Method Summary collapse
- #clear_alt_locator ⇒ Object
-
#click ⇒ Object
Click on an object.
-
#click_at(x, y) ⇒ Object
Click at a specific location within an object.
-
#disabled? ⇒ Boolean
Is UI object disabled (not enabled)?.
-
#displayed? ⇒ Boolean
Is UI object displayed in browser window?.
-
#double_click ⇒ Object
Double-click on an object.
- #drag_and_drop(target, right_offset = nil, down_offset = nil) ⇒ Object
- #drag_by(right_offset, down_offset) ⇒ Object
-
#enabled? ⇒ Boolean
Is UI object enabled?.
-
#exists?(visible = true) ⇒ Boolean
Does UI object exists?.
- #get_attribute(attrib) ⇒ Object
- #get_locator ⇒ Object
- #get_name ⇒ Object
- #get_native_attribute(attrib) ⇒ Object
- #get_object_type ⇒ Object
- #get_siebel_object_type ⇒ Object
- #get_value(visible = true) ⇒ Object (also: #get_caption)
-
#height ⇒ Integer
Return height of object.
-
#hidden? ⇒ Boolean
Is UI object hidden (not visible)?.
-
#hover ⇒ Object
Hover the cursor over an object.
-
#initialize(name, parent, locator, context) ⇒ UIElement
constructor
A new instance of UIElement.
- #invoke_siebel_dialog(popup, seconds = nil) ⇒ Object
-
#right_click ⇒ Object
Right-click on an object.
-
#send_keys(*keys) ⇒ Object
comment_field.send_keys(:enter).
- #set(value) ⇒ Object
- #set_alt_locator(temp_locator) ⇒ Object
- #set_locator_type(locator = nil) ⇒ Object
- #verify_value(expected, enqueue = false) ⇒ Object (also: #verify_caption)
-
#visible? ⇒ Boolean
Is UI object visible?.
-
#wait_until_exists(seconds = nil) ⇒ Object
Wait until the object exists, or until the specified wait time has expired.
-
#wait_until_gone(seconds = nil) ⇒ Object
Wait until the object no longer exists, or until the specified wait time has expired.
-
#wait_until_hidden(seconds = nil) ⇒ Object
Wait until the object is hidden, or until the specified wait time has expired.
-
#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.
-
#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.
-
#wait_until_visible(seconds = nil) ⇒ Object
Wait until the object is visible, or until the specified wait time has expired.
-
#width ⇒ Integer
Return width of object.
-
#x ⇒ Integer
Return x coordinate of object's location.
-
#y ⇒ Integer
Return y coordinate of object's location.
Constructor Details
#initialize(name, parent, locator, context) ⇒ UIElement
Returns a new instance of UIElement.
43 44 45 46 47 48 49 50 51 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 43 def initialize(name, parent, locator, context) @name = name @parent = parent @locator = locator @context = context @type = nil @alt_locator = nil set_locator_type end |
Instance Attribute Details
#alt_locator ⇒ Object
Returns the value of attribute alt_locator.
38 39 40 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 38 def alt_locator @alt_locator end |
#context ⇒ Object (readonly)
Returns the value of attribute context.
37 38 39 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 37 def context @context end |
#locator ⇒ Object (readonly)
Returns the value of attribute locator.
37 38 39 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 37 def locator @locator end |
#locator_type ⇒ Object
Returns the value of attribute locator_type.
38 39 40 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 38 def locator_type @locator_type end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
37 38 39 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 37 def name @name end |
#parent ⇒ Object (readonly)
Returns the value of attribute parent.
37 38 39 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 37 def parent @parent end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
37 38 39 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 37 def type @type end |
Instance Method Details
#clear_alt_locator ⇒ Object
90 91 92 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 90 def clear_alt_locator @alt_locator = nil end |
#click ⇒ Object
Click on an object
99 100 101 102 103 104 105 106 107 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 99 def click obj, type = find_element object_not_found_exception(obj, type) begin obj.click rescue obj.click_at(10, 10) unless Capybara.current_driver == :poltergeist end end |
#click_at(x, y) ⇒ Object
Click at a specific location within an object
138 139 140 141 142 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 138 def click_at(x, y) obj, = find_element raise "UI #{} not found" unless obj obj.click_at(x, y) end |
#disabled? ⇒ Boolean
Is UI object disabled (not enabled)?
231 232 233 234 235 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 231 def disabled? obj, type = find_element object_not_found_exception(obj, type) obj.disabled? end |
#displayed? ⇒ Boolean
Is UI object displayed in browser window?
376 377 378 379 380 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 376 def displayed? obj, type = find_element(false) object_not_found_exception(obj, type) obj.displayed? end |
#double_click ⇒ Object
Double-click on an object
114 115 116 117 118 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 114 def double_click obj, type = find_element object_not_found_exception(obj, type) page.driver.browser.action.double_click(obj.native).perform end |
#drag_and_drop(target, right_offset = nil, down_offset = nil) ⇒ Object
423 424 425 426 427 428 429 430 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 423 def drag_and_drop(target, right_offset = nil, down_offset = nil) source, type = find_element object_not_found_exception(source, type) page.driver.browser.action.click_and_hold(source.native).perform sleep(1) target_drop, = target.find_element page.driver.browser.action.move_to(target_drop.native, right_offset.to_i, down_offset.to_i).release.perform end |
#drag_by(right_offset, down_offset) ⇒ Object
415 416 417 418 419 420 421 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 415 def drag_by(right_offset, down_offset) obj, type = find_element object_not_found_exception(obj, type) page.driver.browser.action.click_and_hold(obj.native).perform sleep(1) obj.drag_by(right_offset, down_offset) end |
#enabled? ⇒ Boolean
Is UI object enabled?
221 222 223 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 221 def enabled? !disabled? end |
#exists?(visible = true) ⇒ Boolean
Does UI object exists?
168 169 170 171 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 168 def exists?(visible = true) obj, = find_object(visible) obj != nil end |
#get_attribute(attrib) ⇒ Object
432 433 434 435 436 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 432 def get_attribute(attrib) obj, type = find_element(false) object_not_found_exception(obj, type) obj[attrib] end |
#get_locator ⇒ Object
78 79 80 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 78 def get_locator @locator end |
#get_name ⇒ Object
82 83 84 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 82 def get_name @name end |
#get_native_attribute(attrib) ⇒ Object
438 439 440 441 442 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 438 def get_native_attribute(attrib) obj, type = find_element(false) object_not_found_exception(obj, type) obj.native.attribute(attrib) end |
#get_object_type ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 68 def get_object_type if @type @type elsif obj.tag_name obj.tag_name elsif obj.native.attribute('type') obj.native.attribute('type') end end |
#get_siebel_object_type ⇒ Object
9 10 11 12 13 |
# File 'lib/testcentricity_web/siebel_open_ui_helper.rb', line 9 def get_siebel_object_type obj, = find_element object_not_found_exception(obj, 'Siebel object') obj.native.attribute('ot') end |
#get_value(visible = true) ⇒ Object Also known as: get_caption
382 383 384 385 386 387 388 389 390 391 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 382 def get_value(visible = true) obj, type = find_element(visible) object_not_found_exception(obj, type) case obj.tag_name.downcase when 'input', 'select', 'textarea' obj.value else obj.text end end |
#height ⇒ Integer
Return height of object.
340 341 342 343 344 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 340 def height obj, type = find_element(false) object_not_found_exception(obj, type) obj.get_height end |
#hidden? ⇒ Boolean
Is UI object hidden (not visible)?
211 212 213 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 211 def hidden? !visible? end |
#hover ⇒ Object
Hover the cursor over an object
409 410 411 412 413 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 409 def hover obj, type = find_element object_not_found_exception(obj, type) obj.hover end |
#invoke_siebel_dialog(popup, seconds = nil) ⇒ Object
3 4 5 6 7 |
# File 'lib/testcentricity_web/siebel_open_ui_helper.rb', line 3 def invoke_siebel_dialog(popup, seconds = nil) invoke_siebel_popup timeout = seconds.nil? ? 15 : seconds popup.wait_until_exists(timeout) end |
#right_click ⇒ Object
Right-click on an object
125 126 127 128 129 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 125 def right_click obj, type = find_element object_not_found_exception(obj, type) page.driver.browser.action.context_click(obj.native).perform end |
#send_keys(*keys) ⇒ Object
comment_field.send_keys(:enter)
156 157 158 159 160 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 156 def send_keys(*keys) obj, type = find_element object_not_found_exception(obj, type) obj.send_keys(*keys) end |
#set(value) ⇒ Object
144 145 146 147 148 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 144 def set(value) obj, type = find_element object_not_found_exception(obj, type) obj.set(value) end |
#set_alt_locator(temp_locator) ⇒ Object
86 87 88 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 86 def set_alt_locator(temp_locator) @alt_locator = temp_locator end |
#set_locator_type(locator = nil) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 53 def set_locator_type(locator = nil) locator = @locator if locator.nil? is_xpath = XPATH_SELECTORS.any? { |selector| locator.include?(selector) } is_css = CSS_SELECTORS.any? { |selector| locator.include?(selector) } if is_xpath && !is_css @locator_type = :xpath elsif is_css && !is_xpath @locator_type = :css elsif !is_css && !is_xpath @locator_type = :css else raise "Cannot determine type of locator for UIElement '#{@name}' - locator = #{locator}" end end |
#verify_value(expected, enqueue = false) ⇒ Object Also known as: verify_caption
395 396 397 398 399 400 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 395 def verify_value(expected, enqueue = false) actual = get_value enqueue ? ExceptionQueue.enqueue_assert_equal(expected.strip, actual.strip, "Expected UI #{}") : assert_equal(expected.strip, actual.strip, "Expected UI #{} to display '#{expected}' but found '#{actual}'") end |
#visible? ⇒ Boolean
Is UI object visible?
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 179 def visible? obj, type = find_object exists = obj invisible = false if type == :css Capybara.using_wait_time 0.1 do # is object itself hidden with .ui-helper-hidden class? self_hidden = page.has_css?("#{@locator}.ui-helper-hidden") # is parent of object hidden, thus hiding the object? parent_hidden = page.has_css?(".ui-helper-hidden > #{@locator}") # is grandparent of object, or any other ancestor, hidden? other_ancestor_hidden = page.has_css?(".ui-helper-hidden * #{@locator}") # if any of the above conditions are true, then object is invisible invisible = self_hidden || parent_hidden || other_ancestor_hidden end else invisible = !obj.visible? if exists end # the object is visible if it exists and it is not invisible if exists && !invisible true else false end end |
#wait_until_exists(seconds = nil) ⇒ Object
Wait until the object exists, or until the specified wait time has expired.
243 244 245 246 247 248 249 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 243 def wait_until_exists(seconds = nil) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { exists? } rescue raise "Could not find UI #{} 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.
257 258 259 260 261 262 263 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 257 def wait_until_gone(seconds = nil) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { !exists? } rescue raise "UI #{} 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.
285 286 287 288 289 290 291 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 285 def wait_until_hidden(seconds = nil) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { hidden? } rescue raise "UI #{} 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.
313 314 315 316 317 318 319 320 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 313 def wait_until_value_changes(seconds = nil) value = get_value timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { get_value != value } rescue raise "Value of UI #{} 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.
299 300 301 302 303 304 305 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 299 def wait_until_value_is(value, seconds = nil) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { get_value == value } rescue raise "Value of UI #{} 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.
271 272 273 274 275 276 277 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 271 def wait_until_visible(seconds = nil) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { visible? } rescue raise "Could not find UI #{} after #{timeout} seconds" unless visible? end |
#width ⇒ Integer
Return width of object.
328 329 330 331 332 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 328 def width obj, type = find_element(false) object_not_found_exception(obj, type) obj.get_width end |
#x ⇒ Integer
Return x coordinate of object's location.
352 353 354 355 356 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 352 def x obj, type = find_element(false) object_not_found_exception(obj, type) obj.get_x end |
#y ⇒ Integer
Return y coordinate of object's location.
364 365 366 367 368 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 364 def y obj, type = find_element(false) object_not_found_exception(obj, type) obj.get_y end |