Class: TestCentricity::PageObject
- Inherits:
-
BasePageSectionObject
- Object
- BasePageSectionObject
- TestCentricity::PageObject
- Defined in:
- lib/testcentricity_web/web_core/page_object.rb
Constant Summary
Constants inherited from BasePageSectionObject
BasePageSectionObject::CSS_SELECTORS, BasePageSectionObject::XPATH_SELECTORS
Instance Attribute Summary
Attributes inherited from BasePageSectionObject
Class Method Summary collapse
-
.audio(element_name, locator) ⇒ Object
Declare and instantiate a single HTML5 audio UI Element for this page object.
- .audios(element_hash) ⇒ Object
-
.button(element_name, locator) ⇒ Object
Declare and instantiate a single button UI Element for this page object.
-
.buttons(element_hash) ⇒ Object
Declare and instantiate a collection of buttons for this page object.
-
.checkbox(element_name, locator) ⇒ Object
Declare and instantiate a single checkbox UI Element for this page object.
-
.checkboxes(element_hash) ⇒ Object
Declare and instantiate a collection of checkboxes for this page object.
-
.element(element_name, locator) ⇒ Object
Declare and instantiate a single generic UI Element for this page object.
-
.elements(element_hash) ⇒ Object
Declare and instantiate a collection of generic UI Elements for this page object.
-
.filefield(element_name, locator) ⇒ Object
Declare and instantiate a single File Field UI Element for this page object.
- .filefields(element_hash) ⇒ Object
-
.image(element_name, locator) ⇒ Object
Declare and instantiate an single image UI Element for this page object.
- .images(element_hash) ⇒ Object
-
.label(element_name, locator) ⇒ Object
Declare and instantiate a single label UI Element for this page object.
-
.labels(element_hash) ⇒ Object
Declare and instantiate a collection of labels for this page object.
-
.link(element_name, locator) ⇒ Object
Declare and instantiate a single link UI Element for this page object.
- .links(element_hash) ⇒ Object
-
.list(element_name, locator) ⇒ Object
Declare and instantiate a single list UI Element for this page object.
- .lists(element_hash) ⇒ Object
-
.radio(element_name, locator) ⇒ Object
Declare and instantiate a single radio button UI Element for this page object.
-
.radios(element_hash) ⇒ Object
Declare and instantiate a collection of radio buttons for this page object.
-
.range(element_name, locator) ⇒ Object
Declare and instantiate a single range input UI Element for this page object.
-
.ranges(element_hash) ⇒ Object
Declare and instantiate a collection of range inputs for this page object.
-
.section(section_name, obj, locator = nil) ⇒ Object
Instantiate a single PageSection object for this page object.
- .sections(section_hash) ⇒ Object
-
.selectlist(element_name, locator) ⇒ Object
Declare and instantiate a single select list UI Element for this page object.
- .selectlists(element_hash) ⇒ Object
-
.table(element_name, locator) ⇒ Object
Declare and instantiate a single table UI Element for this page object.
- .tables(element_hash) ⇒ Object
-
.textfield(element_name, locator) ⇒ Object
Declare and instantiate a single text field UI Element for this page object.
-
.textfields(element_hash) ⇒ Object
Declare and instantiate a collection of text fields for this page object.
-
.video(element_name, locator) ⇒ Object
Declare and instantiate a single HTML5 video UI Element for this page object.
- .videos(element_hash) ⇒ Object
Instance Method Summary collapse
-
#exists? ⇒ Boolean
Does Page object exists?.
-
#initialize ⇒ PageObject
constructor
A new instance of PageObject.
- #load_page ⇒ Object
- #navigate_to ⇒ Object
- #open_portal ⇒ Object
-
#secure? ⇒ Boolean
Is current Page object URL secure?.
-
#send_keys(*keys) ⇒ Object
Send keystrokes to the focused element on a Page object.
-
#title ⇒ String
Return page title.
- #verify_page_contains(content) ⇒ Object
- #verify_page_exists ⇒ Object
- #verify_page_ui ⇒ Object
-
#wait_for_ajax(seconds = nil) ⇒ Object
Wait until all AJAX requests have completed, or until the specified wait time has expired.
-
#wait_until_exists(seconds = nil, post_exception = true) ⇒ Object
Wait until the page object exists, or until the specified wait time has expired.
-
#wait_until_gone(seconds = nil, post_exception = true) ⇒ Object
Wait until the page object no longer exists, or until the specified wait time has expired.
Methods inherited from BasePageSectionObject
#populate_data_fields, #set_locator_type, trait, #verify_focus_order, #verify_ui_states
Constructor Details
#initialize ⇒ PageObject
Returns a new instance of PageObject.
3 4 5 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 3 def initialize set_locator_type(page_locator) if defined?(page_locator) end |
Class Method Details
.audio(element_name, locator) ⇒ Object
Declare and instantiate a single HTML5 audio UI Element for this page object.
275 276 277 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 275 def self.audio(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Audio, locator) end |
.audios(element_hash) ⇒ Object
279 280 281 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 279 def self.audios(element_hash) element_hash.each_pair { |element_name, locator| audio(element_name, locator) } end |
.button(element_name, locator) ⇒ Object
Declare and instantiate a single button UI Element for this page object.
38 39 40 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 38 def self.(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Button, locator) end |
.buttons(element_hash) ⇒ Object
Declare and instantiate a collection of buttons for this page object.
50 51 52 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 50 def self.(element_hash) element_hash.each_pair { |element_name, locator| (element_name, locator) } end |
.checkbox(element_name, locator) ⇒ Object
Declare and instantiate a single checkbox UI Element for this page object.
110 111 112 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 110 def self.checkbox(element_name, locator) define_page_element(element_name, TestCentricity::Elements::CheckBox, locator) end |
.checkboxes(element_hash) ⇒ Object
Declare and instantiate a collection of checkboxes for this page object.
123 124 125 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 123 def self.checkboxes(element_hash) element_hash.each_pair { |element_name, locator| checkbox(element_name, locator) } end |
.element(element_name, locator) ⇒ Object
Declare and instantiate a single generic UI Element for this page object.
14 15 16 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 14 def self.element(element_name, locator) define_page_element(element_name, TestCentricity::Elements::UIElement, locator) end |
.elements(element_hash) ⇒ Object
Declare and instantiate a collection of generic UI Elements for this page object.
26 27 28 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 26 def self.elements(element_hash) element_hash.each_pair { |element_name, locator| element(element_name, locator) } end |
.filefield(element_name, locator) ⇒ Object
Declare and instantiate a single File Field UI Element for this page object.
290 291 292 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 290 def self.filefield(element_name, locator) define_page_element(element_name, TestCentricity::Elements::FileField, locator) end |
.filefields(element_hash) ⇒ Object
294 295 296 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 294 def self.filefields(element_hash) element_hash.each_pair { |element_name, locator| filefield(element_name, locator) } end |
.image(element_name, locator) ⇒ Object
Declare and instantiate an single image UI Element for this page object.
245 246 247 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 245 def self.image(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Image, locator) end |
.images(element_hash) ⇒ Object
249 250 251 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 249 def self.images(element_hash) element_hash.each_pair { |element_name, locator| image(element_name, locator) } end |
.label(element_name, locator) ⇒ Object
Declare and instantiate a single label UI Element for this page object.
160 161 162 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 160 def self.label(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Label, locator) end |
.labels(element_hash) ⇒ Object
Declare and instantiate a collection of labels for this page object.
171 172 173 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 171 def self.labels(element_hash) element_hash.each_pair { |element_name, locator| label(element_name, locator) } end |
.link(element_name, locator) ⇒ Object
Declare and instantiate a single link UI Element for this page object.
183 184 185 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 183 def self.link(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Link, locator) end |
.links(element_hash) ⇒ Object
187 188 189 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 187 def self.links(element_hash) element_hash.each_pair { |element_name, locator| link(element_name, locator) } end |
.list(element_name, locator) ⇒ Object
Declare and instantiate a single list UI Element for this page object.
229 230 231 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 229 def self.list(element_name, locator) define_page_element(element_name, TestCentricity::Elements::List, locator) end |
.lists(element_hash) ⇒ Object
233 234 235 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 233 def self.lists(element_hash) element_hash.each_pair { |element_name, locator| list(element_name, locator) } end |
.radio(element_name, locator) ⇒ Object
Declare and instantiate a single radio button UI Element for this page object.
135 136 137 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 135 def self.radio(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Radio, locator) end |
.radios(element_hash) ⇒ Object
Declare and instantiate a collection of radio buttons for this page object.
148 149 150 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 148 def self.radios(element_hash) element_hash.each_pair { |element_name, locator| radio(element_name, locator) } end |
.range(element_name, locator) ⇒ Object
Declare and instantiate a single range input UI Element for this page object.
87 88 89 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 87 def self.range(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Range, locator) end |
.ranges(element_hash) ⇒ Object
Declare and instantiate a collection of range inputs for this page object.
98 99 100 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 98 def self.ranges(element_hash) element_hash.each_pair { |element_name, locator| range(element_name, locator) } end |
.section(section_name, obj, locator = nil) ⇒ Object
Instantiate a single PageSection object for this page object.
305 306 307 308 309 310 311 312 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 305 def self.section(section_name, obj, locator = nil) define_method(section_name) do ivar_name = "@#{section_name}" ivar = instance_variable_get(ivar_name) return ivar if ivar instance_variable_set(ivar_name, obj.new(section_name, self, "#{locator}", :page)) end end |
.sections(section_hash) ⇒ Object
314 315 316 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 314 def self.sections(section_hash) section_hash.each_pair { |section_name, class_name| section(section_name, class_name) } end |
.selectlist(element_name, locator) ⇒ Object
Declare and instantiate a single select list UI Element for this page object.
214 215 216 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 214 def self.selectlist(element_name, locator) define_page_element(element_name, TestCentricity::Elements::SelectList, locator) end |
.selectlists(element_hash) ⇒ Object
218 219 220 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 218 def self.selectlists(element_hash) element_hash.each_pair { |element_name, locator| selectlist(element_name, locator) } end |
.table(element_name, locator) ⇒ Object
Declare and instantiate a single table UI Element for this page object.
198 199 200 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 198 def self.table(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Table, locator) end |
.tables(element_hash) ⇒ Object
202 203 204 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 202 def self.tables(element_hash) element_hash.each_pair { |element_name, locator| table(element_name, locator) } end |
.textfield(element_name, locator) ⇒ Object
Declare and instantiate a single text field UI Element for this page object.
62 63 64 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 62 def self.textfield(element_name, locator) define_page_element(element_name, TestCentricity::Elements::TextField, locator) end |
.textfields(element_hash) ⇒ Object
Declare and instantiate a collection of text fields for this page object.
75 76 77 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 75 def self.textfields(element_hash) element_hash.each_pair { |element_name, locator| textfield(element_name, locator) } end |
.video(element_name, locator) ⇒ Object
Declare and instantiate a single HTML5 video UI Element for this page object.
260 261 262 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 260 def self.video(element_name, locator) define_page_element(element_name, TestCentricity::Elements::Video, locator) end |
.videos(element_hash) ⇒ Object
264 265 266 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 264 def self.videos(element_hash) element_hash.each_pair { |element_name, locator| video(element_name, locator) } end |
Instance Method Details
#exists? ⇒ Boolean
Does Page object exists?
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 367 def exists? raise "Page object #{self.class.name} does not have a page_locator trait defined" unless defined?(page_locator) saved_wait_time = Capybara.default_max_wait_time Capybara.default_max_wait_time = 0.1 tries ||= 2 attributes = [:id, :css, :xpath] type = attributes[tries] obj = page.find(type, page_locator) obj != nil rescue Capybara.default_max_wait_time = saved_wait_time retry if (tries -= 1) > 0 false ensure Capybara.default_max_wait_time = saved_wait_time end |
#load_page ⇒ Object
343 344 345 346 347 348 349 350 351 352 353 354 355 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 343 def load_page return if exists? if defined?(page_url) && !page_url.nil? visit page_url begin page.driver.browser.switch_to.alert.accept rescue => e end unless Environ.browser == :safari || Environ.browser == :ie || Environ.is_device? else navigate_to end verify_page_exists end |
#navigate_to ⇒ Object
339 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 339 def navigate_to; end |
#open_portal ⇒ Object
318 319 320 321 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 318 def open_portal visit Environ.current.app_host Environ.portal_state = :open end |
#secure? ⇒ Boolean
Is current Page object URL secure?
466 467 468 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 466 def secure? current_url.start_with?('https') end |
#send_keys(*keys) ⇒ Object
Send keystrokes to the focused element on a Page object
400 401 402 403 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 400 def send_keys(*keys) focused_obj = page.driver.browser.switch_to.active_element focused_obj.send_keys(*keys) end |
#title ⇒ String
Return page title
390 391 392 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 390 def title page.driver.browser.title end |
#verify_page_contains(content) ⇒ Object
357 358 359 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 357 def verify_page_contains(content) raise "Expected page to have content '#{content}'" unless page.has_content?(:visible, content) end |
#verify_page_exists ⇒ Object
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 323 def verify_page_exists raise "Page object #{self.class.name} does not have a page_locator trait defined" unless defined?(page_locator) set_locator_type(page_locator) if @locator_type.blank? unless page.has_selector?(@locator_type, page_locator) body_class = find(:xpath, '//body')[:class] = %( Expected page to have selector '#{page_locator}' but found '#{body_class}' instead. Actual URL of page loaded = #{URI.parse(current_url)}. ) = "#{}\nExpected URL of page was #{page_url}." if defined?(page_url) raise end PageManager.current_page = self end |
#verify_page_ui ⇒ Object
341 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 341 def verify_page_ui; end |
#wait_for_ajax(seconds = nil) ⇒ Object
Wait until all AJAX requests have completed, 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.
450 451 452 453 454 455 456 457 458 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 450 def wait_for_ajax(seconds = nil) wait_time = seconds.nil? ? Capybara.default_max_wait_time : seconds Timeout.timeout(wait_time) do loop do active = page.evaluate_script('jQuery.active') break if active.zero? end end end |
#wait_until_exists(seconds = nil, post_exception = true) ⇒ Object
Wait until the page 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.
412 413 414 415 416 417 418 419 420 421 422 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 412 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 if post_exception raise "Page object #{self.class.name} not found after #{timeout} seconds" unless exists? else exists? end end |
#wait_until_gone(seconds = nil, post_exception = true) ⇒ Object
Wait until the page 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.
431 432 433 434 435 436 437 438 439 440 441 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 431 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 if post_exception raise "Page object #{self.class.name} remained visible after #{timeout} seconds" if exists? else exists? end end |