Class: TestCentricity::PageObject

Inherits:
BasePageSectionObject show all
Defined in:
lib/testcentricity_web/web_core/page_object.rb

Class Method Summary collapse

Instance Method Summary collapse

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.

Examples:

audio :audio_player, 'audio#my_audio_player'

Parameters:

  • element_name (Symbol)

    name of an HTML5 audio object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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.

Examples:

button :checkout_button, 'button.checkout_button'
button :login_button,    "//input[@id='submit_button']"

Parameters:

  • element_name (Symbol)

    name of button object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies object



35
36
37
# File 'lib/testcentricity_web/web_core/page_object.rb', line 35

def self.button(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.

Examples:

buttons new_account_button:  'button#new-account',
        save_button:         'button#save',
        cancel_button:       'button#cancel'

Parameters:

  • element_hash (Hash)

    names of buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies buttons



47
48
49
# File 'lib/testcentricity_web/web_core/page_object.rb', line 47

def self.buttons(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.

Examples:

cell_button  :show_button, "a[@class='show']", :data_table, 5
cell_button  :edit_button, "a[@class='edit']", :data_table, 5

Parameters:

  • element_name (Symbol)

    name of cell button object (as a symbol)

  • locator (String)

    XPath expression that uniquely identifies cell button within row and column of parent table object

  • table (Symbol)

    Name (as a symbol) of parent table object

  • column (Integer)

    1-based index of table column that contains the cell button object



301
302
303
# File 'lib/testcentricity_web/web_core/page_object.rb', line 301

def self.cell_button(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.

Examples:

cell_checkbox  :is_registered_check, "a[@class='registered']", :data_table, 4

Parameters:

  • element_name (Symbol)

    name of cell checkbox object (as a symbol)

  • locator (String)

    XPath expression that uniquely identifies cell checkbox within row and column of parent table object

  • table (Symbol)

    Name (as a symbol) of parent table object

  • column (Integer)

    1-based index of table column that contains the cell checkbox 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.

Examples:

cell_image  :ready_icon, "img[@class='ready']", :data_table, 3
cell_image  :send_icon, "img[@class='send']", :data_table, 3

Parameters:

  • element_name (Symbol)

    name of cell image object (as a symbol)

  • locator (String)

    XPath expression that uniquely identifies cell image within row and column of parent table object

  • table (Symbol)

    Name (as a symbol) of parent table object

  • column (Integer)

    1-based index of table column that contains the cell image 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.

Examples:

cell_radio  :track_a_radio, "a[@class='track_a']", :data_table, 8

Parameters:

  • element_name (Symbol)

    name of cell radio object (as a symbol)

  • locator (String)

    XPath expression that uniquely identifies cell radio within row and column of parent table object

  • table (Symbol)

    Name (as a symbol) of parent table object

  • column (Integer)

    1-based index of table column that contains the cell radio 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.

Examples:

checkbox :remember_checkbox,     "//input[@id='RememberUser']"
checkbox :accept_terms_checkbox, 'input#accept_terms_conditions', :accept_terms_label

Parameters:

  • element_name (Symbol)

    name of checkbox object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies object

  • proxy (Symbol) (defaults to: nil)

    Optional name (as a symbol) of proxy object to receive click actions



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.

Examples:

checkboxes  hazmat_certified_check:  'input#hazmatCertified',
            epa_certified_check:     'input#epaCertified',
            dhs_certified_check:     'input#homelandSecurityCertified',
            carb_compliant_check:    'input#carbCompliant'

Parameters:

  • element_hash (Hash)

    names of checkboxes (as a symbol) and CSS selectors or XPath expressions that uniquely identifies checkboxes



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.

Examples:

element :siebel_view,  'div#_sweview'
element :siebel_busy,  "//html[contains(@class, 'siebui-busy')]"

Parameters:

  • element_name (Symbol)

    name of UI object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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.

Examples:

elements  profile_item:  'a#profile',
          settings_item: 'a#userPreferencesTrigger',
          log_out_item:  'a#logout'

Parameters:

  • element_hash (Hash)

    names of UI objects (as a symbol) and CSS selectors or XPath expressions that uniquely identifies objects



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.

Examples:

filefield :attach_file, 's_SweFileName'

Parameters:

  • element_name (Symbol)

    name of file field object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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.

Examples:

image :basket_item_image,    'div.product_image'
image :corporate_logo_image, "//img[@alt='MyCompany_logo']"

Parameters:

  • element_name (Symbol)

    name of image object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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.

Examples:

label :welcome_label,      'div.Welcome'
label :rollup_price_label, "//div[contains(@id, 'Rollup Item Price')]"

Parameters:

  • element_name (Symbol)

    name of label object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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

Declare and instantiate a single link UI Element for this page object.

Examples:

link :registration_link,    'a.account-nav__link.register'
link :shopping_basket_link, "//a[@href='shopping_basket']"

Parameters:

  • element_name (Symbol)

    name of link object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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


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.

Examples:

list :x_axis_list, 'g.x-axis'

Parameters:

  • element_name (Symbol)

    name of list object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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.

Examples:

list_button  :delete_button, "a[@class='delete']", :icon_list
list_button  :edit_button, "a[@class='edit']", :icon_list

Parameters:

  • element_name (Symbol)

    name of list button object (as a symbol)

  • locator (String)

    XPath expression that uniquely identifies list button within row of parent list object

  • list (Symbol)

    Name (as a symbol) of parent list object



354
355
356
# File 'lib/testcentricity_web/web_core/page_object.rb', line 354

def self.list_button(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.

Examples:

list_checkbox  :is_registered_check, "a[@class='registered']", :data_list

Parameters:

  • element_name (Symbol)

    name of list checkbox object (as a symbol)

  • locator (String)

    XPath expression that uniquely identifies list checkbox within row of parent list object

  • list (Symbol)

    Name (as a symbol) of parent list 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.

Examples:

list_radio  :sharing_radio, "a[@class='sharing']", :data_list

Parameters:

  • element_name (Symbol)

    name of list radio object (as a symbol)

  • locator (String)

    XPath expression that uniquely identifies list radio within row of parent list object

  • list (Symbol)

    Name (as a symbol) of parent list 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.

Examples:

radio :accept_terms_radio,  "//input[@id='Accept_Terms']"
radio :decline_terms_radio, '#decline_terms_conditions', :decline_terms_label

Parameters:

  • element_name (Symbol)

    name of radio object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies object

  • proxy (Symbol) (defaults to: nil)

    Optional name (as a symbol) of proxy object to receive click actions



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.

Examples:

radios  visa_radio:       'input#payWithVisa',
        mastercard_radio: 'input#payWithMastercard',
        discover_radio:   'input#payWithDiscover',
        amex_radio:       'input#payWithAmEx'

Parameters:

  • element_hash (Hash)

    names of radio buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies radio buttons



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.

Examples:

range :volume_level, "//input[@id='volume_slider']"
range :points_slider, 'input#points'

Parameters:

  • element_name (Symbol)

    name of range input object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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.

Examples:

ranges points_slider: 'input#points',
       risk_slider:   'input#risk_percentage'

Parameters:

  • element_hash (Hash)

    names of ranges (as a symbol) and CSS selectors or XPath expressions that uniquely identifies the ranges



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.

Examples:

section :search_form, SearchForm

Parameters:

  • section_name (Symbol)

    name of PageSection object (as a symbol)

  • class_name (String)

    Class name of PageSection 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.

Examples:

selectlist :category_selector, 'select#search_form_category_chosen'
selectlist :gender_select,     "//select[@id='customer_gender']"

Parameters:

  • element_name (Symbol)

    name of select list object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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.

Examples:

table :payments_table, "//table[@class='payments_table']"

Parameters:

  • element_name (Symbol)

    name of table object (as a symbol)

  • locator (String)

    XPath expression that uniquely identifies 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.

Examples:

textfield :user_id_field,  "//input[@id='UserName']"
textfield :password_field, 'input#consumer_password'

Parameters:

  • element_name (Symbol)

    name of text field object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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.

Examples:

textfields  name_field:    'input#Name',
            title_field:   'input#Title',
            phone_field:   'input#PhoneNumber',
            fax_field:     'input#FaxNumber',
            email_field:   'input#Email'

Parameters:

  • element_hash (Hash)

    names of text fields (as a symbol) and CSS selectors or XPath expressions that uniquely identifies text fields



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.

Examples:

video :video_player, 'video#my_video_player'

Parameters:

  • element_name (Symbol)

    name of an HTML5 video object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies 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?

Examples:

home_page.exists?

Returns:

  • (Boolean)


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_pageObject



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


429
# File 'lib/testcentricity_web/web_core/page_object.rb', line 429

def navigate_to; end

#open_portalObject



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?

Examples:

home_page.secure?

Returns:

  • (Boolean)


556
557
558
# File 'lib/testcentricity_web/web_core/page_object.rb', line 556

def secure?
  current_url.start_with?('https')
end

#send_keys(*keys) ⇒ Object

Send keystrokes to the focused element on a Page object

Examples:

editor_page.send_keys([:control, 'z'])

Parameters:



490
491
492
493
# File 'lib/testcentricity_web/web_core/page_object.rb', line 490

def send_keys(*keys)
  focused_obj = page.driver.browser.switch_to.active_element
  focused_obj.send_keys(*keys)
end

#titleString

Return page title

Examples:

home_page.title

Returns:



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_existsObject



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]
    error_message = %(
      Expected page to have selector '#{page_locator}' but found '#{body_class}' instead.
      Actual URL of page loaded = #{URI.parse(current_url)}.
      )
    error_message = "#{error_message}\nExpected URL of page was #{page_url}." if defined?(page_url)
    raise error_message
  end
  PageManager.current_page = self
end

#verify_page_uiObject



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.

Examples:

shopping_basket_page.wait_for_ajax(15)

Parameters:

  • seconds (Integer or Float) (defaults to: nil)

    wait time in seconds



540
541
542
543
544
545
546
547
548
# File 'lib/testcentricity_web/web_core/page_object.rb', line 540

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.

Examples:

home_page.wait_until_exists(15)

Parameters:

  • seconds (Integer or Float) (defaults to: nil)

    wait time in seconds



502
503
504
505
506
507
508
509
510
511
512
# File 'lib/testcentricity_web/web_core/page_object.rb', line 502

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.

Examples:

payment_processing_page.wait_until_gone(15)

Parameters:

  • seconds (Integer or Float) (defaults to: nil)

    wait time in seconds



521
522
523
524
525
526
527
528
529
530
531
# File 'lib/testcentricity_web/web_core/page_object.rb', line 521

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