Class: TestCentricity::UIElement
- Includes:
- Capybara::DSL, Test::Unit::Assertions
- Defined in:
- lib/testcentricity_web/web_elements/ui_elements_helper.rb,
lib/testcentricity_web/web_elements/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('].freeze
- CSS_SELECTORS =
['#', ':nth-child(', ':first-child', ':last-child', ':nth-of-type(', ':first-of-type', ':last-of-type', '^=', '$=', '*=', ':contains('].freeze
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.
-
#original_style ⇒ Object
Returns the value of attribute original_style.
-
#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.
-
#count(visible = true) ⇒ Object
Return the number of occurrences of an object with an ambiguous locator that evaluates to multiple UI elements.
-
#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_locator_type ⇒ 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)?.
-
#highlight(duration = 1) ⇒ Object
Highlight an object with a 3 pixel wide, red dashed border for the specified wait time.
-
#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
-
#unhighlight ⇒ Object
Restore a highlighted object's original style.
- #verify_value(expected, enqueue = false) ⇒ Object (also: #verify_caption)
-
#visible? ⇒ Boolean
Is UI object visible?.
-
#wait_until_exists(seconds = nil, post_exception = true) ⇒ Object
Wait until the object exists, or until the specified wait time has expired.
-
#wait_until_gone(seconds = nil, post_exception = true) ⇒ Object
Wait until the object no longer exists, or until the specified wait time has expired.
-
#wait_until_hidden(seconds = nil, post_exception = true) ⇒ Object
Wait until the object is hidden, or until the specified wait time has expired.
-
#wait_until_value_changes(seconds = nil, post_exception = true) ⇒ 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, post_exception = true) ⇒ Object
Wait until the object's value equals the specified value, or until the specified wait time has expired.
-
#wait_until_visible(seconds = nil, post_exception = true) ⇒ 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.
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 45 def initialize(name, parent, locator, context) @name = name @parent = parent @locator = locator @context = context @type = nil @alt_locator = nil @original_style = nil set_locator_type end |
Instance Attribute Details
#alt_locator ⇒ Object
Returns the value of attribute alt_locator.
40 41 42 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 40 def alt_locator @alt_locator end |
#context ⇒ Object (readonly)
Returns the value of attribute context.
39 40 41 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 39 def context @context end |
#locator ⇒ Object (readonly)
Returns the value of attribute locator.
39 40 41 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 39 def locator @locator end |
#locator_type ⇒ Object
Returns the value of attribute locator_type.
40 41 42 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 40 def locator_type @locator_type end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
39 40 41 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 39 def name @name end |
#original_style ⇒ Object
Returns the value of attribute original_style.
40 41 42 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 40 def original_style @original_style end |
#parent ⇒ Object (readonly)
Returns the value of attribute parent.
39 40 41 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 39 def parent @parent end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
39 40 41 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 39 def type @type end |
Instance Method Details
#clear_alt_locator ⇒ Object
101 102 103 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 101 def clear_alt_locator @alt_locator = nil end |
#click ⇒ Object
Click on an object
110 111 112 113 114 115 116 117 118 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 110 def click obj, type = find_element object_not_found_exception(obj, type) begin obj.click rescue StandardError 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
149 150 151 152 153 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 149 def click_at(x, y) obj, = find_element raise "UI #{} not found" unless obj obj.click_at(x, y) end |
#count(visible = true) ⇒ Object
Return the number of occurrences of an object with an ambiguous locator that evaluates to multiple UI elements.
377 378 379 380 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 377 def count(visible = true) obj_locator = @alt_locator.nil? ? @locator : @alt_locator page.all(@locator_type, obj_locator, wait: 0.01, visible: visible, minimum: 0).count end |
#disabled? ⇒ Boolean
Is UI object disabled (not enabled)?
242 243 244 245 246 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 242 def disabled? obj, type = find_element object_not_found_exception(obj, type) obj.disabled? end |
#displayed? ⇒ Boolean
Is UI object displayed in browser window?
436 437 438 439 440 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 436 def displayed? obj, type = find_element(false) object_not_found_exception(obj, type) obj.displayed? end |
#double_click ⇒ Object
Double-click on an object
125 126 127 128 129 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 125 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
483 484 485 486 487 488 489 490 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 483 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
475 476 477 478 479 480 481 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 475 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?
232 233 234 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 232 def enabled? !disabled? end |
#exists?(visible = true) ⇒ Boolean
Does UI object exists?
179 180 181 182 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 179 def exists?(visible = true) obj, = find_object(visible) obj != nil end |
#get_attribute(attrib) ⇒ Object
540 541 542 543 544 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 540 def get_attribute(attrib) obj, type = find_element(false) object_not_found_exception(obj, type) obj[attrib] end |
#get_locator ⇒ Object
89 90 91 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 89 def get_locator @locator end |
#get_locator_type ⇒ Object
71 72 73 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 71 def get_locator_type @locator_type end |
#get_name ⇒ Object
93 94 95 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 93 def get_name @name end |
#get_native_attribute(attrib) ⇒ Object
546 547 548 549 550 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 546 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
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 75 def get_object_type if @type @type else obj, type = find_element object_not_found_exception(obj, type) if obj.tag_name obj.tag_name elsif obj.native.attribute('type') obj.native.attribute('type') end end end |
#get_siebel_object_type ⇒ Object
9 10 11 12 13 |
# File 'lib/testcentricity_web/web_elements/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:
442 443 444 445 446 447 448 449 450 451 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 442 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.
400 401 402 403 404 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 400 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)?
222 223 224 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 222 def hidden? !visible? end |
#highlight(duration = 1) ⇒ Object
Highlight an object with a 3 pixel wide, red dashed border for the specified wait time. If wait time is zero, then the highlight will remain until the page is refreshed
499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 499 def highlight(duration = 1) obj, type = find_element object_not_found_exception(obj, type) # store original style so it can be reset later @original_style = obj.native.attribute('style') # style element with red border page.execute_script( 'arguments[0].setAttribute(arguments[1], arguments[2])', obj, 'style', 'border: 3px solid red; border-style: dashed;' ) # keep element highlighted for duration and then revert to original style if duration.positive? sleep duration page.execute_script( 'arguments[0].setAttribute(arguments[1], arguments[2])', obj, 'style', @original_style ) end end |
#hover ⇒ Object
Hover the cursor over an object
469 470 471 472 473 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 469 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/web_elements/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
136 137 138 139 140 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 136 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)
167 168 169 170 171 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 167 def send_keys(*keys) obj, type = find_element object_not_found_exception(obj, type) obj.send_keys(*keys) end |
#set(value) ⇒ Object
155 156 157 158 159 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 155 def set(value) obj, type = find_element object_not_found_exception(obj, type) obj.set(value) end |
#set_alt_locator(temp_locator) ⇒ Object
97 98 99 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 97 def set_alt_locator(temp_locator) @alt_locator = temp_locator end |
#set_locator_type(locator = nil) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 56 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) } @locator_type = if is_xpath && !is_css :xpath elsif is_css && !is_xpath :css elsif !is_css && !is_xpath :css else :css end end |
#unhighlight ⇒ Object
Restore a highlighted object's original style
528 529 530 531 532 533 534 535 536 537 538 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 528 def unhighlight obj, type = find_element object_not_found_exception(obj, type) return if @original_style.nil? page.execute_script( 'arguments[0].setAttribute(arguments[1], arguments[2])', obj, 'style', @original_style ) end |
#verify_value(expected, enqueue = false) ⇒ Object Also known as:
455 456 457 458 459 460 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 455 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?
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 190 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, post_exception = true) ⇒ 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 Capybara.default_max_wait_time.
255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 255 def wait_until_exists(seconds = nil, post_exception = true) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { exists? } rescue StandardError if post_exception raise "Could not find UI #{} after #{timeout} seconds" unless exists? else exists? end end |
#wait_until_gone(seconds = nil, post_exception = true) ⇒ 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 Capybara.default_max_wait_time.
274 275 276 277 278 279 280 281 282 283 284 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 274 def wait_until_gone(seconds = nil, post_exception = true) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { !exists? } rescue StandardError if post_exception raise "UI #{} remained visible after #{timeout} seconds" if exists? else exists? end end |
#wait_until_hidden(seconds = nil, post_exception = true) ⇒ 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 Capybara.default_max_wait_time.
312 313 314 315 316 317 318 319 320 321 322 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 312 def wait_until_hidden(seconds = nil, post_exception = true) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { hidden? } rescue StandardError if post_exception raise "UI #{} remained visible after #{timeout} seconds" if visible? else visible? end end |
#wait_until_value_changes(seconds = nil, post_exception = true) ⇒ 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 Capybara.default_max_wait_time.
353 354 355 356 357 358 359 360 361 362 363 364 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 353 def wait_until_value_changes(seconds = nil, post_exception = true) 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 StandardError if post_exception raise "Value of UI #{} failed to change from '#{value}' after #{timeout} seconds" if get_value == value else get_value == value end end |
#wait_until_value_is(value, seconds = nil, post_exception = true) ⇒ 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 Capybara.default_max_wait_time.
334 335 336 337 338 339 340 341 342 343 344 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 334 def wait_until_value_is(value, seconds = nil, post_exception = true) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { compare(value, get_value) } rescue StandardError if post_exception raise "Value of UI #{} failed to equal '#{value}' after #{timeout} seconds" unless get_value == value else get_value == value end end |
#wait_until_visible(seconds = nil, post_exception = true) ⇒ 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 Capybara.default_max_wait_time.
293 294 295 296 297 298 299 300 301 302 303 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 293 def wait_until_visible(seconds = nil, post_exception = true) timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { visible? } rescue StandardError if post_exception raise "Could not find UI #{} after #{timeout} seconds" unless visible? else visible? end end |
#width ⇒ Integer
Return width of object.
388 389 390 391 392 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 388 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.
412 413 414 415 416 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 412 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.
424 425 426 427 428 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 424 def y obj, type = find_element(false) object_not_found_exception(obj, type) obj.get_y end |