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(@']
- 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/web_elements/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/web_elements/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/web_elements/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/web_elements/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/web_elements/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/web_elements/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/web_elements/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/web_elements/ui_elements_helper.rb', line 37 def type @type end |
Instance Method Details
#clear_alt_locator ⇒ Object
94 95 96 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 94 def clear_alt_locator @alt_locator = nil end |
#click ⇒ Object
Click on an object
103 104 105 106 107 108 109 110 111 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 103 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
142 143 144 145 146 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 142 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)?
235 236 237 238 239 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 235 def disabled? obj, type = find_element object_not_found_exception(obj, type) obj.disabled? end |
#displayed? ⇒ Boolean
Is UI object displayed in browser window?
389 390 391 392 393 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 389 def displayed? obj, type = find_element(false) object_not_found_exception(obj, type) obj.displayed? end |
#double_click ⇒ Object
Double-click on an object
118 119 120 121 122 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 118 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
436 437 438 439 440 441 442 443 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 436 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
428 429 430 431 432 433 434 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 428 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?
225 226 227 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 225 def enabled? !disabled? end |
#exists?(visible = true) ⇒ Boolean
Does UI object exists?
172 173 174 175 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 172 def exists?(visible = true) obj, = find_object(visible) obj != nil end |
#get_attribute(attrib) ⇒ Object
445 446 447 448 449 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 445 def get_attribute(attrib) obj, type = find_element(false) object_not_found_exception(obj, type) obj[attrib] end |
#get_locator ⇒ Object
82 83 84 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 82 def get_locator @locator end |
#get_name ⇒ Object
86 87 88 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 86 def get_name @name end |
#get_native_attribute(attrib) ⇒ Object
451 452 453 454 455 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 451 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 77 78 79 80 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 68 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:
395 396 397 398 399 400 401 402 403 404 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 395 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.
353 354 355 356 357 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 353 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)?
215 216 217 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 215 def hidden? !visible? end |
#hover ⇒ Object
Hover the cursor over an object
422 423 424 425 426 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 422 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
129 130 131 132 133 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 129 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)
160 161 162 163 164 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 160 def send_keys(*keys) obj, type = find_element object_not_found_exception(obj, type) obj.send_keys(*keys) end |
#set(value) ⇒ Object
148 149 150 151 152 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 148 def set(value) obj, type = find_element object_not_found_exception(obj, type) obj.set(value) end |
#set_alt_locator(temp_locator) ⇒ Object
90 91 92 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 90 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/web_elements/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) } @locator_type = if is_xpath && !is_css :xpath elsif is_css && !is_xpath :css elsif !is_css && !is_xpath :css else :css end end |
#verify_value(expected, enqueue = false) ⇒ Object Also known as:
408 409 410 411 412 413 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 408 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?
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 183 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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.
248 249 250 251 252 253 254 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 248 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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.
263 264 265 266 267 268 269 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 263 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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.
293 294 295 296 297 298 299 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 293 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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.
326 327 328 329 330 331 332 333 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 326 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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.
311 312 313 314 315 316 317 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 311 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 { compare(value, get_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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.
278 279 280 281 282 283 284 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 278 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.
341 342 343 344 345 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 341 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.
365 366 367 368 369 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 365 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.
377 378 379 380 381 |
# File 'lib/testcentricity_web/web_elements/ui_elements_helper.rb', line 377 def y obj, type = find_element(false) object_not_found_exception(obj, type) obj.get_y end |