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, 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.
- .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?.
-
#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.
267 268 269 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 267 def self.audio(element_name, locator) define_page_element(element_name, TestCentricity::Audio, locator) end |
.audios(element_hash) ⇒ Object
271 272 273 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 271 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, proxy = nil) ⇒ Object
Declare and instantiate a single checkbox UI Element for this page object.
108 109 110 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 108 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.
121 122 123 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 121 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.
282 283 284 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 282 def self.filefield(element_name, locator) define_page_element(element_name, TestCentricity::FileField, locator) end |
.filefields(element_hash) ⇒ Object
286 287 288 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 286 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.
237 238 239 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 237 def self.image(element_name, locator) define_page_element(element_name, TestCentricity::Image, locator) end |
.images(element_hash) ⇒ Object
241 242 243 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 241 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.
159 160 161 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 159 def self.label(element_name, locator) define_page_element(element_name, TestCentricity::Label, locator) end |
.labels(element_hash) ⇒ Object
163 164 165 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 163 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.
175 176 177 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 175 def self.link(element_name, locator) define_page_element(element_name, TestCentricity::Link, locator) end |
.links(element_hash) ⇒ Object
179 180 181 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 179 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.
221 222 223 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 221 def self.list(element_name, locator) define_page_element(element_name, TestCentricity::List, locator) end |
.lists(element_hash) ⇒ Object
225 226 227 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 225 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.
134 135 136 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 134 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.
147 148 149 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 147 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.
297 298 299 300 301 302 303 304 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 297 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
306 307 308 309 310 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 306 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.
206 207 208 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 206 def self.selectlist(element_name, locator) define_page_element(element_name, TestCentricity::SelectList, locator) end |
.selectlists(element_hash) ⇒ Object
210 211 212 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 210 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.
190 191 192 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 190 def self.table(element_name, locator) define_page_element(element_name, TestCentricity::Table, locator) end |
.tables(element_hash) ⇒ Object
194 195 196 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 194 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.
252 253 254 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 252 def self.video(element_name, locator) define_page_element(element_name, TestCentricity::Video, locator) end |
.videos(element_hash) ⇒ Object
256 257 258 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 256 def self.videos(element_hash) element_hash.each(&method(:video)) end |
Instance Method Details
#exists? ⇒ Boolean
Does Page object exists?
365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 365 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
341 342 343 344 345 346 347 348 349 350 351 352 353 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 341 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
337 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 337 def navigate_to; end |
#open_portal ⇒ Object
312 313 314 315 316 317 318 319 320 321 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 312 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?
464 465 466 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 464 def secure? current_url.start_with?('https') end |
#send_keys(*keys) ⇒ Object
Send keystrokes to the focused element on a Page object
398 399 400 401 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 398 def send_keys(*keys) focused_obj = page.driver.browser.switch_to.active_element focused_obj.send_keys(*keys) end |
#title ⇒ String
Return page title
388 389 390 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 388 def title page.driver.browser.title end |
#verify_page_contains(content) ⇒ Object
355 356 357 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 355 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 |
# 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) 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
339 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 339 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.
448 449 450 451 452 453 454 455 456 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 448 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.
410 411 412 413 414 415 416 417 418 419 420 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 410 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.
429 430 431 432 433 434 435 436 437 438 439 |
# File 'lib/testcentricity_web/web_core/page_object.rb', line 429 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 |