Class: TestCentricity::PageObject

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.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



61
62
63
64
65
66
67
68
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 61

def self.button(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::Button.new(element_name, self, locator, :page))
  end
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



78
79
80
81
82
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 78

def self.buttons(element_hash)
  element_hash.each do |element_name, locator|
    button(element_name, locator)
  end
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



341
342
343
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 341

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



354
355
356
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 354

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



381
382
383
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 381

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



367
368
369
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 367

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



126
127
128
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 126

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



139
140
141
142
143
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 139

def self.checkboxes(element_hash)
  element_hash.each do |element_name, locator|
    checkbox(element_name, locator)
  end
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
33
34
35
36
37
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 30

def self.element(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::UIElement.new(element_name, self, locator, :page))
  end
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



47
48
49
50
51
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 47

def self.elements(element_hash)
  element_hash.each do |element_name, locator|
    element(element_name, locator)
  end
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



316
317
318
319
320
321
322
323
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 316

def self.filefield(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::FileField.new(element_name, self, locator, :page))
  end
end

.filefields(element_hash) ⇒ Object



325
326
327
328
329
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 325

def self.filefields(element_hash)
  element_hash.each do |element_name, locator|
    filefield(element_name, locator)
  end
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



294
295
296
297
298
299
300
301
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 294

def self.image(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::Image.new(element_name, self, locator, :page))
  end
end

.images(element_hash) ⇒ Object



303
304
305
306
307
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 303

def self.images(element_hash)
  element_hash.each do |element_name, locator|
    image(element_name, locator)
  end
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



181
182
183
184
185
186
187
188
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 181

def self.label(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::Label.new(element_name, self, locator, :page))
  end
end

.labels(element_hash) ⇒ Object



190
191
192
193
194
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 190

def self.labels(element_hash)
  element_hash.each do |element_name, locator|
    label(element_name, locator)
  end
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



204
205
206
207
208
209
210
211
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 204

def self.link(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::Link.new(element_name, self, locator, :page))
  end
end


213
214
215
216
217
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 213

def self.links(element_hash)
  element_hash.each do |element_name, locator|
    link(element_name, locator)
  end
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



271
272
273
274
275
276
277
278
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 271

def self.list(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::List.new(element_name, self, locator, :page))
  end
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



394
395
396
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 394

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



406
407
408
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 406

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



418
419
420
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 418

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



280
281
282
283
284
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 280

def self.lists(element_hash)
  element_hash.each do |element_name, locator|
    list(element_name, locator)
  end
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



154
155
156
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 154

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



167
168
169
170
171
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 167

def self.radios(element_hash)
  element_hash.each do |element_name, locator|
    radio(element_name, locator)
  end
end

.section(section_name, class_name, 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



429
430
431
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 429

def self.section(section_name, class_name, locator = nil)
  class_eval(%(def #{section_name};@#{section_name} ||= #{class_name}.new("#{section_name}", self, "#{locator}", :page);end))
end

.sections(section_hash) ⇒ Object



433
434
435
436
437
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 433

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



249
250
251
252
253
254
255
256
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 249

def self.selectlist(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::SelectList.new(element_name, self, locator, :page))
  end
end

.selectlists(element_hash) ⇒ Object



258
259
260
261
262
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 258

def self.selectlists(element_hash)
  element_hash.each do |element_name, locator|
    selectlist(element_name, locator)
  end
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



226
227
228
229
230
231
232
233
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 226

def self.table(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::Table.new(element_name, self, locator, :page))
  end
end

.tables(element_hash) ⇒ Object



235
236
237
238
239
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 235

def self.tables(element_hash)
  element_hash.each do |element_name, locator|
    table(element_name, locator)
  end
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



92
93
94
95
96
97
98
99
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 92

def self.textfield(element_name, locator)
  define_method(element_name) do
    ivar_name = "@#{element_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, TestCentricity::TextField.new(element_name, self, locator, :page))
  end
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



111
112
113
114
115
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 111

def self.textfields(element_hash)
  element_hash.each do |element_name, locator|
    textfield(element_name, locator)
  end
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_core/page_objects_helper.rb', line 18

def self.trait(trait_name, &block)
  define_method(trait_name.to_s, &block)
end

Instance Method Details

#exists?Boolean

Does Page object exists?

Examples:

home_page.exists?

Returns:

  • (Boolean)


494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 494

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



470
471
472
473
474
475
476
477
478
479
480
481
482
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 470

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


466
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 466

def navigate_to; end

#open_portalObject



439
440
441
442
443
444
445
446
447
448
449
450
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 439

def open_portal
  environment = Environ.current
  environment.hostname.blank? ?
      url = "#{environment.base_url}#{environment.append}" :
      url = "#{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) ⇒ 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



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
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 683

def populate_data_fields(data, wait_time = nil)
  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
            data_field.get_siebel_object_type == 'JComboBox' ?
                data_field.set("#{data_param}\t") :
                data_field.choose_option(data_param)
          when :radio
            data_field.set_selected_state(data_param.to_bool)
          when :textfield
            data_field.set("#{data_param}\t")
          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)


547
548
549
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 547

def secure?
  !current_url.match(/^https/).nil?
end

#verify_page_contains(content) ⇒ Object



484
485
486
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 484

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

#verify_page_existsObject



452
453
454
455
456
457
458
459
460
461
462
463
464
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 452

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



468
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 468

def verify_page_ui; end

#verify_ui_states(ui_states) ⇒ Object



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
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 551

def verify_ui_states(ui_states)
  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 :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 :options, :items, :list_items
          actual = ui_object.get_list_items
        when :optioncount, :itemcount
          actual = ui_object.get_item_count
        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 :siebel_options
          actual = ui_object.get_siebel_options
        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
          else
            props = property.to_s.split('_')
            case props[0].to_sym
              when :cell
                cell = property.to_s.delete('cell_')
                cell = cell.split('_')
                actual = ui_object.get_table_cell(cell[0].to_i, cell[1].to_i)
              when :row
                row = property.to_s.delete('row_')
                actual = ui_object.get_table_row(row.to_i)
              when :column
                column = property.to_s.delete('column_')
                actual = ui_object.get_table_column(column.to_i)
              when :item
                item = property.to_s.delete('item_')
                actual = ui_object.get_list_item(item.to_i)
            end
          end
      end
      error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
      ExceptionQueue.enqueue_comparison(state, actual, error_msg)
    end
  end
rescue ObjectNotFoundError => e
  ExceptionQueue.enqueue_exception(e.message)
ensure
  ExceptionQueue.post_exceptions
end

#wait_until_exists(seconds = nil) ⇒ 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



518
519
520
521
522
523
524
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 518

def wait_until_exists(seconds = nil)
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { exists? }
rescue
  raise "Page object #{self.class.name} not found after #{timeout} seconds" unless exists?
end

#wait_until_gone(seconds = nil) ⇒ 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:

verifying_page.wait_until_gone(15)

Parameters:

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

    wait time in seconds



533
534
535
536
537
538
539
# File 'lib/testcentricity/web_core/page_objects_helper.rb', line 533

def wait_until_gone(seconds = nil)
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { !exists? }
rescue
  raise "Page object #{self.class.name} remained visible after #{timeout} seconds" if exists?
end