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
-
.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.
269 270 271 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 269 def self.audio(element_name, locator) define_page_element(element_name, TestCentricity::Audio, locator) end |
.audios(element_hash) ⇒ Object
273 274 275 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 273 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.
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::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(&method(:button)) end |
.checkbox(element_name, locator) ⇒ Object
Declare and instantiate a single checkbox UI Element for this page object.
111 112 113 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 111 def self.checkbox(element_name, locator) define_page_element(element_name, TestCentricity::CheckBox, locator) end |
.checkboxes(element_hash) ⇒ Object
Declare and instantiate a collection of checkboxes for this page object.
124 125 126 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 124 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.
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::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(&method(:element)) end |
.filefield(element_name, locator) ⇒ Object
Declare and instantiate a single File Field UI Element for this page object.
284 285 286 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 284 def self.filefield(element_name, locator) define_page_element(element_name, TestCentricity::FileField, locator) end |
.filefields(element_hash) ⇒ Object
288 289 290 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 288 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.
239 240 241 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 239 def self.image(element_name, locator) define_page_element(element_name, TestCentricity::Image, locator) end |
.images(element_hash) ⇒ Object
243 244 245 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 243 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.
161 162 163 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 161 def self.label(element_name, locator) define_page_element(element_name, TestCentricity::Label, locator) end |
.labels(element_hash) ⇒ Object
165 166 167 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 165 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.
177 178 179 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 177 def self.link(element_name, locator) define_page_element(element_name, TestCentricity::Link, locator) end |
.links(element_hash) ⇒ Object
181 182 183 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 181 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.
223 224 225 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 223 def self.list(element_name, locator) define_page_element(element_name, TestCentricity::List, locator) end |
.lists(element_hash) ⇒ Object
227 228 229 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 227 def self.lists(element_hash) element_hash.each(&method(:list)) end |
.radio(element_name, locator) ⇒ Object
Declare and instantiate a single radio button UI Element for this page object.
136 137 138 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 136 def self.radio(element_name, locator) define_page_element(element_name, TestCentricity::Radio, locator) end |
.radios(element_hash) ⇒ Object
Declare and instantiate a collection of radio buttons for this page object.
149 150 151 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 149 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.
88 89 90 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 88 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.
99 100 101 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 99 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.
299 300 301 302 303 304 305 306 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 299 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
308 309 310 311 312 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 308 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.
208 209 210 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 208 def self.selectlist(element_name, locator) define_page_element(element_name, TestCentricity::SelectList, locator) end |
.selectlists(element_hash) ⇒ Object
212 213 214 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 212 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.
192 193 194 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 192 def self.table(element_name, locator) define_page_element(element_name, TestCentricity::Table, locator) end |
.tables(element_hash) ⇒ Object
196 197 198 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 196 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.
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::TextField, locator) end |
.textfields(element_hash) ⇒ Object
Declare and instantiate a collection of text fields for this page object.
76 77 78 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 76 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.
254 255 256 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 254 def self.video(element_name, locator) define_page_element(element_name, TestCentricity::Video, locator) end |
.videos(element_hash) ⇒ Object
258 259 260 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 258 def self.videos(element_hash) element_hash.each(&method(:video)) end |
Instance Method Details
#exists? ⇒ Boolean
Does Page object exists?
363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 363 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
339 340 341 342 343 344 345 346 347 348 349 350 351 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 339 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
335 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 335 def navigate_to; end |
#open_portal ⇒ Object
314 315 316 317 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 314 def open_portal visit Environ.current.app_host Environ.portal_state = :open end |
#secure? ⇒ Boolean
Is current Page object URL secure?
462 463 464 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 462 def secure? current_url.start_with?('https') end |
#send_keys(*keys) ⇒ Object
Send keystrokes to the focused element on a Page object
396 397 398 399 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 396 def send_keys(*keys) focused_obj = page.driver.browser.switch_to.active_element focused_obj.send_keys(*keys) end |
#title ⇒ String
Return page title
386 387 388 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 386 def title page.driver.browser.title end |
#verify_page_contains(content) ⇒ Object
353 354 355 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 353 def verify_page_contains(content) raise "Expected page to have content '#{content}'" unless page.has_content?(:visible, content) end |
#verify_page_exists ⇒ Object
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 319 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
337 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 337 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.
446 447 448 449 450 451 452 453 454 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 446 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.
408 409 410 411 412 413 414 415 416 417 418 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 408 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.
427 428 429 430 431 432 433 434 435 436 437 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 427 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 |