Class: TestCentricity::PageObject

Inherits:
Object
  • Object
show all
Includes:
Capybara::DSL, Capybara::Node::Matchers, Test::Unit::Assertions
Defined in:
lib/testcentricity_web/web_core/page_objects_helper.rb

Class Method Summary collapse

Instance Method Summary collapse

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



264
265
266
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 264

def self.audio(element_name, locator)
  define_page_element(element_name, TestCentricity::Audio, locator)
end

.audios(element_hash) ⇒ Object



268
269
270
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 268

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



54
55
56
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 54

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



66
67
68
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 66

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



297
298
299
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 297

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



310
311
312
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 310

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



337
338
339
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 337

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



323
324
325
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 323

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



105
106
107
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 105

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



118
119
120
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 118

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



30
31
32
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 30

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



42
43
44
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 42

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



279
280
281
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 279

def self.filefield(element_name, locator)
  define_page_element(element_name, TestCentricity::FileField, locator)
end

.filefields(element_hash) ⇒ Object



283
284
285
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 283

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



234
235
236
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 234

def self.image(element_name, locator)
  define_page_element(element_name, TestCentricity::Image, locator)
end

.images(element_hash) ⇒ Object



238
239
240
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 238

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



156
157
158
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 156

def self.label(element_name, locator)
  define_page_element(element_name, TestCentricity::Label, locator)
end

.labels(element_hash) ⇒ Object



160
161
162
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 160

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



172
173
174
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 172

def self.link(element_name, locator)
  define_page_element(element_name, TestCentricity::Link, locator)
end


176
177
178
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 176

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



218
219
220
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 218

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



350
351
352
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 350

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



362
363
364
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 362

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



374
375
376
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 374

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



222
223
224
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 222

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



131
132
133
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 131

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



144
145
146
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 144

def self.radios(element_hash)
  element_hash.each(&method(:radio))
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



385
386
387
388
389
390
391
392
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 385

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



394
395
396
397
398
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 394

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



203
204
205
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 203

def self.selectlist(element_name, locator)
  define_page_element(element_name, TestCentricity::SelectList, locator)
end

.selectlists(element_hash) ⇒ Object



207
208
209
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 207

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



187
188
189
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 187

def self.table(element_name, locator)
  define_page_element(element_name, TestCentricity::Table, locator)
end

.tables(element_hash) ⇒ Object



191
192
193
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 191

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, '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



78
79
80
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 78

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



92
93
94
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 92

def self.textfields(element_hash)
  element_hash.each(&method(:textfield))
end

.trait(trait_name, &block) ⇒ Object

Define a trait for this page object.

Examples:

trait(:page_name)     { 'Shopping Basket' }
trait(:page_url)      { '/shopping_basket' }
trait(:page_locator)  { "//body[@class='shopping_baskets']" }

Parameters:

  • trait_name (Symbol)

    name of trait (as a symbol)

  • block (&block)

    trait value



18
19
20
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 18

def self.trait(trait_name, &block)
  define_method(trait_name.to_s, &block)
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



249
250
251
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 249

def self.video(element_name, locator)
  define_page_element(element_name, TestCentricity::Video, locator)
end

.videos(element_hash) ⇒ Object



253
254
255
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 253

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)


453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 453

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



429
430
431
432
433
434
435
436
437
438
439
440
441
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 429

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


425
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 425

def navigate_to; end

#open_portalObject



400
401
402
403
404
405
406
407
408
409
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 400

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

#populate_data_fields(data, wait_time = nil, integrity_check = false) ⇒ Object

Populate the specified UI elements on this page with the associated data from a Hash passed as an argument. Data values must be in the form of a String for textfield and select list controls. For checkbox and radio buttons, data must either be a Boolean or a String that evaluates to a Boolean value (Yes, No, 1, 0, true, false).

The optional wait_time parameter is used to specify the time (in seconds) to wait for each UI element to become visible before entering the associated data value. This option is useful in situations where entering data, or setting the state of a UI element might cause other UI elements to become visible or active. Specifying a wait_time value ensures that the subsequent UI elements will be ready to be interacted with as states are changed. If the wait time is nil, then the wait time will be 5 seconds.

To delete all text content in a text field, pass !DELETE as the data to be entered.

Examples:

field_data = { prefix_select      => 'Ms',
               first_name_field   => 'Priscilla',
               last_name_field    => 'Pumperknickle',
               gender_select      => 'Female',
               dob_field          => '11/18/1976',
               email_field        => '[email protected]',
               mailing_list_check => 'Yes'
       }
populate_data_fields(field_data)

Parameters:

  • data (Hash)

    UI element(s) and associated data to be entered

  • wait_time (Integer) (defaults to: nil)

    wait time in seconds

  • integrity_check (Boolean) (defaults to: false)

    if TRUE, ensure that text entered into text fields matches what was entered



755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 755

def populate_data_fields(data, wait_time = nil, integrity_check = false)
  timeout = wait_time.nil? ? 5 : wait_time
  data.each do |data_field, data_param|
    unless data_param.blank?
      # make sure the intended UI target element is visible before trying to set its value
      data_field.wait_until_visible(timeout)
      if data_param == '!DELETE'
        data_field.clear
      else
        case data_field.get_object_type
        when :checkbox
          data_field.set_checkbox_state(data_param.to_bool)
        when :selectlist
          if data_field.get_siebel_object_type == 'JComboBox'
            data_field.set("#{data_param}\t")
          else
            data_field.choose_option(data_param)
          end
        when :radio
          data_field.set_selected_state(data_param.to_bool)
        when :textfield
          data_field.set("#{data_param}\t")
          if integrity_check && data_field.get_value != data_param
            data_field.set('')
            data_field.send_keys(data_param)
            data_field.send_keys(:tab)
          end
        when :section
          data_field.set(data_param)
        end
      end
    end
  end
end

#secure?Boolean

Is current Page object URL secure?

Examples:

home_page.secure?

Returns:

  • (Boolean)


541
542
543
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 541

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

#titleString

Return page title

Examples:

home_page.title

Returns:



476
477
478
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 476

def title
  page.driver.browser.title
end

#verify_page_contains(content) ⇒ Object



443
444
445
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 443

def verify_page_contains(content)
  raise "Expected page to have content '#{content}'" unless page.has_content?(:visible, content)
end

#verify_page_existsObject



411
412
413
414
415
416
417
418
419
420
421
422
423
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 411

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



427
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 427

def verify_page_ui; end

#verify_ui_states(ui_states, fail_message = nil) ⇒ Object



545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 545

def verify_ui_states(ui_states, fail_message = nil)
  ui_states.each do |ui_object, object_states|
    object_states.each do |property, state|
      case property
      when :class
        actual = ui_object.get_attribute(:class)
      when :name
        actual = ui_object.get_attribute(:name)
      when :title
        actual = ui_object.title
      when :exists
        actual = ui_object.exists?
      when :enabled
        actual = ui_object.enabled?
      when :disabled
        actual = ui_object.disabled?
      when :visible
        actual = ui_object.visible?
      when :hidden
        actual = ui_object.hidden?
      when :displayed
        actual = ui_object.displayed?
      when :width
        actual = ui_object.width
      when :height
        actual = ui_object.height
      when :x
        actual = ui_object.x
      when :y
        actual = ui_object.y
      when :readonly
        actual = ui_object.read_only?
      when :checked
        actual = ui_object.checked?
      when :selected
        actual = ui_object.selected?
      when :value, :caption
        actual = ui_object.get_value
      when :maxlength
        actual = ui_object.get_max_length
      when :rowcount
        actual = ui_object.get_row_count
      when :columncount
        actual = ui_object.get_column_count
      when :placeholder
        actual = ui_object.get_placeholder
      when :min
        actual = ui_object.get_min
      when :max
        actual = ui_object.get_max
      when :step
        actual = ui_object.get_step
      when :loaded
        actual = ui_object.loaded?
      when :broken
        actual = ui_object.broken?
      when :alt
        actual = ui_object.alt
      when :src
        actual = ui_object.src
      when :autoplay
        actual = ui_object.autoplay?
      when :ended
        actual = ui_object.ended?
      when :controls
        actual = ui_object.controls?
      when :loop
        actual = ui_object.loop?
      when :muted
        actual = ui_object.muted?
      when :default_muted
        actual = ui_object.default_muted?
      when :paused
        actual = ui_object.paused?
      when :seeking
        actual = ui_object.seeking?
      when :current_time
        actual = ui_object.current_time
      when :default_playback_rate
        actual = ui_object.default_playback_rate
      when :duration
        actual = ui_object.duration
      when :playback_rate
        actual = ui_object.playback_rate
      when :ready_state
        actual = ui_object.ready_state
      when :volume
        actual = ui_object.volume
      when :options, :items, :list_items
        actual = ui_object.get_list_items
      when :optioncount, :itemcount
        actual = ui_object.get_item_count
      when :groupcount
        actual = ui_object.get_group_count
      when :group_headings
        actual = ui_object.get_group_headings
      when :all_items, :all_list_items
        actual = ui_object.get_all_list_items
      when :all_items_count
        actual = ui_object.get_all_items_count
      when :column_headers
        actual = ui_object.get_header_columns
      when :count, :count_visible
        actual = ui_object.count(visible = true)
      when :count_all
        actual = ui_object.count(visible = :all)
      when :siebel_options
        actual = ui_object.get_siebel_options
      when :style
        actual = ui_object.style
      when :href
        actual = ui_object.href
      when :role
        actual = ui_object.role
      when :aria_label
        actual = ui_object.aria_label
      when :aria_disabled
        actual = ui_object.aria_disabled?
      when :tabindex
        actual = ui_object.tabindex
      when :aria_labelledby
        actual = ui_object.aria_labelledby
      when :aria_describedby
        actual = ui_object.aria_describedby
      when :aria_live
        actual = ui_object.aria_live
      when :aria_selected
        actual = ui_object.aria_selected?
      when :aria_hidden
        actual = ui_object.aria_hidden?
      when :aria_expanded
        actual = ui_object.aria_expanded?
      when :aria_required
        actual = ui_object.aria_required?
      when :aria_invalid
        actual = ui_object.aria_invalid?
      when :aria_checked
        actual = ui_object.aria_checked?
      when :aria_readonly
        actual = ui_object.aria_readonly?
      when :aria_pressed
        actual = ui_object.aria_pressed?
      when :aria_haspopup
        actual = ui_object.aria_haspopup?
      when :aria_sort
        actual = ui_object.aria_sort
      when :aria_rowcount
        actual = ui_object.aria_rowcount
      when :aria_colcount
        actual = ui_object.aria_colcount
      else
        if property.is_a?(Hash)
          property.each do |key, value|
            case key
            when :cell
              actual = ui_object.get_table_cell(value[0].to_i, value[1].to_i)
            when :row
              actual = ui_object.get_table_row(value.to_i)
            when :column
              actual = ui_object.get_table_column(value.to_i)
            when :item
              actual = ui_object.get_list_item(value.to_i)
            when :attribute
              actual = ui_object.get_attribute(value)
            when :native_attribute
              actual = ui_object.get_native_attribute(value)
            end
          end
        end
      end
      error_msg = if ui_object.respond_to?(:get_name)
                    "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
                  else
                    "Expected '#{page_name}' page object #{property} property to"
                  end
      ExceptionQueue.enqueue_comparison(ui_object, state, actual, error_msg)
    end
  end
rescue ObjectNotFoundError => e
  ExceptionQueue.enqueue_exception(e.message)
ensure
  ExceptionQueue.post_exceptions(fail_message)
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



525
526
527
528
529
530
531
532
533
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 525

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



487
488
489
490
491
492
493
494
495
496
497
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 487

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



506
507
508
509
510
511
512
513
514
515
516
# File 'lib/testcentricity_web/web_core/page_objects_helper.rb', line 506

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