Class: TestCentricity::PageObject
- Inherits:
-
BasePageSectionObject
- Object
- BasePageSectionObject
- TestCentricity::PageObject
- Defined in:
- lib/testcentricity_web/web_core/page_object.rb
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.
-
.cell_button(element_name, locator, table, column) ⇒ Object
Declare and instantiate a cell button in a table column on this page object.
-
.cell_checkbox(element_name, locator, table, column, proxy = nil) ⇒ Object
Declare and instantiate a cell checkbox in a table column on this page object.
-
.cell_image(element_name, locator, table, column) ⇒ Object
Declare and instantiate a cell image in a table column on this page object.
-
.cell_radio(element_name, locator, table, column, proxy = nil) ⇒ Object
Declare and instantiate a cell radio in a table column on this page object.
-
.checkbox(element_name, locator, proxy = nil) ⇒ 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
-
.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.
-
.list_button(element_name, locator, list) ⇒ Object
Declare and instantiate a list button in a row of a list object on this page object.
-
.list_checkbox(element_name, locator, list, proxy = nil) ⇒ Object
Declare and instantiate a list checkbox in a row of a list object on this page object.
-
.list_radio(element_name, locator, list, proxy = nil) ⇒ Object
Declare and instantiate a list radio in a row of a list object on this page object.
- .lists(element_hash) ⇒ Object
-
.radio(element_name, locator, proxy = nil) ⇒ 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?.
- #load_page ⇒ Object
- #navigate_to ⇒ Object
- #open_portal ⇒ Object
-
#secure? ⇒ Boolean
Is current Page object URL secure?.
-
#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, trait, #verify_ui_states
Class Method Details
.audio(element_name, locator) ⇒ Object
Declare and instantiate a single HTML5 audio UI Element for this page object.
268 269 270 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 268 def self.audio(element_name, locator) define_page_element(element_name, TestCentricity::Audio, locator) end |
.audios(element_hash) ⇒ Object
272 273 274 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 272 def self.audios(element_hash) element_hash.each(&method(:audio)) end |
.button(element_name, locator) ⇒ Object
Declare and instantiate a single button UI Element for this page object.
35 36 37 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 35 def self.(element_name, locator) define_page_element(element_name, TestCentricity::Button, locator) end |
.buttons(element_hash) ⇒ Object
Declare and instantiate a collection of buttons for this page object.
47 48 49 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 47 def self.(element_hash) element_hash.each(&method(:button)) end |
.cell_button(element_name, locator, table, column) ⇒ Object
Declare and instantiate a cell button in a table column on this page object.
301 302 303 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 301 def self.(element_name, locator, table, column) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellButton.new("#{element_name}", self, "#{locator}", :page, #{table}, #{column});end)) end |
.cell_checkbox(element_name, locator, table, column, proxy = nil) ⇒ Object
Declare and instantiate a cell checkbox in a table column on this page object.
314 315 316 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 314 def self.cell_checkbox(element_name, locator, table, column, proxy = nil) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellCheckBox.new("#{element_name}", self, "#{locator}", :page, #{table}, #{column}, #{proxy});end)) end |
.cell_image(element_name, locator, table, column) ⇒ Object
Declare and instantiate a cell image in a table column on this page object.
341 342 343 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 341 def self.cell_image(element_name, locator, table, column) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellImage.new("#{element_name}", self, "#{locator}", :page, #{table}, #{column});end)) end |
.cell_radio(element_name, locator, table, column, proxy = nil) ⇒ Object
Declare and instantiate a cell radio in a table column on this page object.
327 328 329 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 327 def self.cell_radio(element_name, locator, table, column, proxy = nil) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellRadio.new("#{element_name}", self, "#{locator}", :page, #{table}, #{column}, #{proxy});end)) end |
.checkbox(element_name, locator, proxy = nil) ⇒ Object
Declare and instantiate a single checkbox UI Element for this page object.
109 110 111 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 109 def self.checkbox(element_name, locator, proxy = nil) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CheckBox.new("#{element_name}", self, "#{locator}", :page, #{proxy});end)) end |
.checkboxes(element_hash) ⇒ Object
Declare and instantiate a collection of checkboxes for this page object.
122 123 124 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 122 def self.checkboxes(element_hash) element_hash.each(&method(:checkbox)) end |
.element(element_name, locator) ⇒ Object
Declare and instantiate a single generic UI Element for this page object.
11 12 13 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 11 def self.element(element_name, locator) define_page_element(element_name, TestCentricity::UIElement, locator) end |
.elements(element_hash) ⇒ Object
Declare and instantiate a collection of generic UI Elements for this page object.
23 24 25 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 23 def self.elements(element_hash) element_hash.each(&method(:element)) end |
.filefield(element_name, locator) ⇒ Object
Declare and instantiate a single File Field UI Element for this page object.
283 284 285 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 283 def self.filefield(element_name, locator) define_page_element(element_name, TestCentricity::FileField, locator) end |
.filefields(element_hash) ⇒ Object
287 288 289 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 287 def self.filefields(element_hash) element_hash.each(&method(:filefield)) end |
.image(element_name, locator) ⇒ Object
Declare and instantiate an single image UI Element for this page object.
238 239 240 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 238 def self.image(element_name, locator) define_page_element(element_name, TestCentricity::Image, locator) end |
.images(element_hash) ⇒ Object
242 243 244 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 242 def self.images(element_hash) element_hash.each(&method(:image)) 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::Label, locator) end |
.labels(element_hash) ⇒ Object
164 165 166 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 164 def self.labels(element_hash) element_hash.each(&method(:label)) end |
.link(element_name, locator) ⇒ Object
Declare and instantiate a single link UI Element for this page object.
176 177 178 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 176 def self.link(element_name, locator) define_page_element(element_name, TestCentricity::Link, locator) end |
.links(element_hash) ⇒ Object
180 181 182 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 180 def self.links(element_hash) element_hash.each(&method(:link)) end |
.list(element_name, locator) ⇒ Object
Declare and instantiate a single list UI Element for this page object.
222 223 224 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 222 def self.list(element_name, locator) define_page_element(element_name, TestCentricity::List, locator) end |
.list_button(element_name, locator, list) ⇒ Object
Declare and instantiate a list button in a row of a list object on this page object.
354 355 356 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 354 def self.(element_name, locator, list) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::ListButton.new("#{element_name}", self, "#{locator}", :page, #{list});end)) end |
.list_checkbox(element_name, locator, list, proxy = nil) ⇒ Object
Declare and instantiate a list checkbox in a row of a list object on this page object.
366 367 368 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 366 def self.list_checkbox(element_name, locator, list, proxy = nil) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::ListCheckBox.new("#{element_name}", self, "#{locator}", :page, #{list}, #{proxy});end)) end |
.list_radio(element_name, locator, list, proxy = nil) ⇒ Object
Declare and instantiate a list radio in a row of a list object on this page object.
378 379 380 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 378 def self.list_radio(element_name, locator, list, proxy = nil) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::ListRadio.new("#{element_name}", self, "#{locator}", :page, #{list}, #{proxy});end)) end |
.lists(element_hash) ⇒ Object
226 227 228 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 226 def self.lists(element_hash) element_hash.each(&method(:list)) end |
.radio(element_name, locator, proxy = nil) ⇒ 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, proxy = nil) class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Radio.new("#{element_name}", self, "#{locator}", :page, #{proxy});end)) 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(&method(:radio)) end |
.range(element_name, locator) ⇒ Object
Declare and instantiate a single range input UI Element for this page object.
85 86 87 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 85 def self.range(element_name, locator) define_page_element(element_name, TestCentricity::Range, locator) end |
.ranges(element_hash) ⇒ Object
Declare and instantiate a collection of range inputs for this page object.
96 97 98 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 96 def self.ranges(element_hash) element_hash.each(&method(:range)) end |
.section(section_name, obj, locator = nil) ⇒ Object
Instantiate a single PageSection object for this page object.
389 390 391 392 393 394 395 396 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 389 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
398 399 400 401 402 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 398 def self.sections(section_hash) section_hash.each do |section_name, class_name| section(section_name, class_name) end end |
.selectlist(element_name, locator) ⇒ Object
Declare and instantiate a single select list UI Element for this page object.
207 208 209 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 207 def self.selectlist(element_name, locator) define_page_element(element_name, TestCentricity::SelectList, locator) end |
.selectlists(element_hash) ⇒ Object
211 212 213 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 211 def self.selectlists(element_hash) element_hash.each(&method(:selectlist)) end |
.table(element_name, locator) ⇒ Object
Declare and instantiate a single table UI Element for this page object.
191 192 193 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 191 def self.table(element_name, locator) define_page_element(element_name, TestCentricity::Table, locator) end |
.tables(element_hash) ⇒ Object
195 196 197 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 195 def self.tables(element_hash) element_hash.each(&method(:table)) end |
.textfield(element_name, locator) ⇒ Object
Declare and instantiate a single text field UI Element for this page object.
59 60 61 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 59 def self.textfield(element_name, locator) define_page_element(element_name, TestCentricity::TextField, locator) end |
.textfields(element_hash) ⇒ Object
Declare and instantiate a collection of text fields for this page object.
73 74 75 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 73 def self.textfields(element_hash) element_hash.each(&method(:textfield)) end |
.video(element_name, locator) ⇒ Object
Declare and instantiate a single HTML5 video UI Element for this page object.
253 254 255 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 253 def self.video(element_name, locator) define_page_element(element_name, TestCentricity::Video, locator) end |
.videos(element_hash) ⇒ Object
257 258 259 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 257 def self.videos(element_hash) element_hash.each(&method(:video)) end |
Instance Method Details
#exists? ⇒ Boolean
Does Page object exists?
457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 457 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
433 434 435 436 437 438 439 440 441 442 443 444 445 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 433 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
429 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 429 def navigate_to; end |
#open_portal ⇒ Object
404 405 406 407 408 409 410 411 412 413 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 404 def open_portal environment = Environ.current url = environment.hostname.blank? ? "#{environment.base_url}#{environment.append}" : "#{environment.hostname}/#{environment.base_url}#{environment.append}" if environment.user_id.blank? || environment.password.blank? visit "#{environment.protocol}://#{url}" else visit "#{environment.protocol}://#{environment.user_id}:#{environment.password}@#{url}" end Environ.portal_state = :open end |
#secure? ⇒ Boolean
Is current Page object URL secure?
545 546 547 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 545 def secure? current_url.start_with?('https') end |
#title ⇒ String
Return page title
480 481 482 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 480 def title page.driver.browser.title end |
#verify_page_contains(content) ⇒ Object
447 448 449 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 447 def verify_page_contains(content) raise "Expected page to have content '#{content}'" unless page.has_content?(:visible, content) end |
#verify_page_exists ⇒ Object
415 416 417 418 419 420 421 422 423 424 425 426 427 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 415 def verify_page_exists raise "Page object #{self.class.name} does not have a page_locator trait defined" unless defined?(page_locator) unless page.has_selector?(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
431 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 431 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.
529 530 531 532 533 534 535 536 537 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 529 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.
491 492 493 494 495 496 497 498 499 500 501 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 491 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.
510 511 512 513 514 515 516 517 518 519 520 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 510 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 |