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.
-
.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?.
- #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, trait, #verify_focus_order, #verify_ui_states
Class Method Details
.audio(element_name, locator) ⇒ Object
Declare and instantiate a single HTML5 audio UI Element for this page object.
265 266 267 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 265 def self.audio(element_name, locator) define_page_element(element_name, TestCentricity::Audio, locator) end |
.audios(element_hash) ⇒ Object
269 270 271 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 269 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.
34 35 36 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 34 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.
46 47 48 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 46 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.
107 108 109 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 107 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.
120 121 122 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 120 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.
10 11 12 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 10 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.
22 23 24 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 22 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.
280 281 282 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 280 def self.filefield(element_name, locator) define_page_element(element_name, TestCentricity::FileField, locator) end |
.filefields(element_hash) ⇒ Object
284 285 286 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 284 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.
235 236 237 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 235 def self.image(element_name, locator) define_page_element(element_name, TestCentricity::Image, locator) end |
.images(element_hash) ⇒ Object
239 240 241 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 239 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.
157 158 159 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 157 def self.label(element_name, locator) define_page_element(element_name, TestCentricity::Label, locator) end |
.labels(element_hash) ⇒ Object
161 162 163 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 161 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.
173 174 175 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 173 def self.link(element_name, locator) define_page_element(element_name, TestCentricity::Link, locator) end |
.links(element_hash) ⇒ Object
177 178 179 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 177 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.
219 220 221 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 219 def self.list(element_name, locator) define_page_element(element_name, TestCentricity::List, locator) end |
.lists(element_hash) ⇒ Object
223 224 225 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 223 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.
132 133 134 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 132 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.
145 146 147 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 145 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.
84 85 86 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 84 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.
95 96 97 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 95 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.
295 296 297 298 299 300 301 302 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 295 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
304 305 306 307 308 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 304 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.
204 205 206 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 204 def self.selectlist(element_name, locator) define_page_element(element_name, TestCentricity::SelectList, locator) end |
.selectlists(element_hash) ⇒ Object
208 209 210 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 208 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.
188 189 190 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 188 def self.table(element_name, locator) define_page_element(element_name, TestCentricity::Table, locator) end |
.tables(element_hash) ⇒ Object
192 193 194 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 192 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.
58 59 60 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 58 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.
72 73 74 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 72 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.
250 251 252 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 250 def self.video(element_name, locator) define_page_element(element_name, TestCentricity::Video, locator) end |
.videos(element_hash) ⇒ Object
254 255 256 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 254 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
310 311 312 313 314 315 316 317 318 319 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 310 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?
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
321 322 323 324 325 326 327 328 329 330 331 332 333 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 321 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
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 |