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, CheckBox, FileField, Image, Label, Link, List, Radio, SelectList, Table, TextField
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.
-
#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)?.
-
#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_native_attribute(attrib) ⇒ Object
- #get_object_type ⇒ Object
- #get_siebel_object_type ⇒ Object
- #get_value(visible = true) ⇒ Object
-
#hidden? ⇒ Boolean
Is UI object hidden (not visible)?.
-
#hover ⇒ Object
Hover the cursor over an object.
-
#initialize(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
- #verify_value(expected, enqueue = false) ⇒ Object
-
#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_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.
Constructor Details
#initialize(parent, locator, context) ⇒ UIElement
Returns a new instance of UIElement.
28 29 30 31 32 33 34 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 28 def initialize(parent, locator, context) @parent = parent @locator = locator @context = context @type = nil @alt_locator = nil end |
Instance Attribute Details
#alt_locator ⇒ Object
Returns the value of attribute alt_locator.
26 27 28 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 26 def alt_locator @alt_locator end |
#context ⇒ Object (readonly)
Returns the value of attribute context.
25 26 27 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 25 def context @context end |
#locator ⇒ Object (readonly)
Returns the value of attribute locator.
25 26 27 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 25 def locator @locator end |
#parent ⇒ Object (readonly)
Returns the value of attribute parent.
25 26 27 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 25 def parent @parent end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
25 26 27 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 25 def type @type end |
Instance Method Details
#clear_alt_locator ⇒ Object
54 55 56 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 54 def clear_alt_locator @alt_locator = nil end |
#click ⇒ Object
Click on an object
63 64 65 66 67 68 69 70 71 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 63 def click obj, _ = find_element object_not_found_exception(obj, nil) 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
102 103 104 105 106 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 102 def click_at(x, y) obj, _ = find_element raise "Object #{@locator} not found" unless obj obj.click_at(x, y) end |
#disabled? ⇒ Boolean
Is UI object disabled (not enabled)?
191 192 193 194 195 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 191 def disabled? obj, _ = find_element object_not_found_exception(obj, nil) obj.disabled? end |
#double_click ⇒ Object
Double-click on an object
78 79 80 81 82 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 78 def double_click obj, _ = find_element object_not_found_exception(obj, nil) page.driver.browser.action.double_click(obj.native).perform end |
#drag_and_drop(target, right_offset = nil, down_offset = nil) ⇒ Object
303 304 305 306 307 308 309 310 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 303 def drag_and_drop(target, right_offset = nil, down_offset = nil) source, _ = find_element object_not_found_exception(source, nil) page.driver.browser.action.click_and_hold(source.native).perform sleep(0.5) 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
297 298 299 300 301 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 297 def drag_by(right_offset, down_offset) obj, _ = find_element object_not_found_exception(obj, nil) obj.drag_by(right_offset, down_offset) end |
#enabled? ⇒ Boolean
Is UI object enabled?
181 182 183 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 181 def enabled? not disabled? end |
#exists?(visible = true) ⇒ Boolean
Does UI object exists?
132 133 134 135 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 132 def exists?(visible = true) obj, _ = find_object(visible) obj != nil end |
#get_attribute(attrib) ⇒ Object
312 313 314 315 316 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 312 def get_attribute(attrib) obj, _ = find_element object_not_found_exception(obj, nil) obj[attrib] end |
#get_locator ⇒ Object
46 47 48 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 46 def get_locator @locator end |
#get_native_attribute(attrib) ⇒ Object
318 319 320 321 322 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 318 def get_native_attribute(attrib) obj, _ = find_element object_not_found_exception(obj, nil) obj.native.attribute(attrib) end |
#get_object_type ⇒ Object
36 37 38 39 40 41 42 43 44 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 36 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
268 269 270 271 272 273 274 275 276 277 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 268 def get_value(visible = true) obj, _ = find_element(visible) object_not_found_exception(obj, nil) case obj.tag_name.downcase when 'input', 'select', 'textarea' obj.value else obj.text end end |
#hidden? ⇒ Boolean
Is UI object hidden (not visible)?
171 172 173 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 171 def hidden? not visible? end |
#hover ⇒ Object
Hover the cursor over an object
291 292 293 294 295 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 291 def hover obj, _ = find_element object_not_found_exception(obj, nil) 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
89 90 91 92 93 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 89 def right_click obj, _ = find_element object_not_found_exception(obj, nil) page.driver.browser.action.context_click(obj.native).perform end |
#send_keys(*keys) ⇒ Object
comment_field.send_keys(:enter)
120 121 122 123 124 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 120 def send_keys(*keys) obj, _ = find_element object_not_found_exception(obj, nil) obj.send_keys(*keys) end |
#set(value) ⇒ Object
108 109 110 111 112 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 108 def set(value) obj, _ = find_element object_not_found_exception(obj, nil) obj.set(value) end |
#set_alt_locator(temp_locator) ⇒ Object
50 51 52 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 50 def set_alt_locator(temp_locator) @alt_locator = temp_locator end |
#verify_value(expected, enqueue = false) ⇒ Object
279 280 281 282 283 284 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 279 def verify_value(expected, enqueue = false) actual = get_value enqueue ? ExceptionQueue.enqueue_assert_equal(expected.strip, actual.strip, "Expected #{@locator}") : assert_equal(expected.strip, actual.strip, "Expected #{@locator} to display '#{expected}' but found '#{actual}'") end |
#visible? ⇒ Boolean
Is UI object visible?
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 143 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 (exists && !invisible) ? true : false end |
#wait_until_exists(seconds = nil) ⇒ Object
Wait until the object exists, or until the specified wait time has expired.
203 204 205 206 207 208 209 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 203 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 element #{@locator} 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.
231 232 233 234 235 236 237 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 231 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 "Element #{@locator} remained visible after #{timeout} seconds" if exists? 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.
259 260 261 262 263 264 265 266 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 259 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 element #{@locator} 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.
245 246 247 248 249 250 251 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 245 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 element #{@locator} 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.
217 218 219 220 221 222 223 |
# File 'lib/testcentricity_web/ui_elements_helper.rb', line 217 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 element #{@locator} after #{timeout} seconds" unless exists? end |