Class: TestCentricity::PageObject

Inherits:
Object
  • Object
show all
Includes:
Capybara::DSL, Capybara::Node::Matchers, Test::Unit::Assertions
Defined in:
lib/testcentricity_web/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



56
57
58
# File 'lib/testcentricity_web/page_objects_helper.rb', line 56

def self.button(element_name, locator)
  class_eval(%(def #{element_name};@#{element_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



68
69
70
71
72
# File 'lib/testcentricity_web/page_objects_helper.rb', line 68

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



291
292
293
# File 'lib/testcentricity_web/page_objects_helper.rb', line 291

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



304
305
306
# File 'lib/testcentricity_web/page_objects_helper.rb', line 304

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



331
332
333
# File 'lib/testcentricity_web/page_objects_helper.rb', line 331

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



317
318
319
# File 'lib/testcentricity_web/page_objects_helper.rb', line 317

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



111
112
113
# File 'lib/testcentricity_web/page_objects_helper.rb', line 111

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



124
125
126
127
128
# File 'lib/testcentricity_web/page_objects_helper.rb', line 124

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
# File 'lib/testcentricity_web/page_objects_helper.rb', line 30

def self.element(element_name, locator)
  class_eval(%(def #{element_name};@#{element_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



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

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



271
272
273
# File 'lib/testcentricity_web/page_objects_helper.rb', line 271

def self.filefield(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::FileField.new("#{element_name}", self, "#{locator}", :page);end))
end

.filefields(element_hash) ⇒ Object



275
276
277
278
279
# File 'lib/testcentricity_web/page_objects_helper.rb', line 275

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



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

def self.image(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Image.new("#{element_name}", self, "#{locator}", :page);end))
end

.images(element_hash) ⇒ Object



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

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



166
167
168
# File 'lib/testcentricity_web/page_objects_helper.rb', line 166

def self.label(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Label.new("#{element_name}", self, "#{locator}", :page);end))
end

.labels(element_hash) ⇒ Object



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

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



184
185
186
# File 'lib/testcentricity_web/page_objects_helper.rb', line 184

def self.link(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Link.new("#{element_name}", self, "#{locator}", :page);end))
end


188
189
190
191
192
# File 'lib/testcentricity_web/page_objects_helper.rb', line 188

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



236
237
238
# File 'lib/testcentricity_web/page_objects_helper.rb', line 236

def self.list(element_name, locator)
  class_eval(%(def #{element_name};@#{element_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



344
345
346
# File 'lib/testcentricity_web/page_objects_helper.rb', line 344

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



356
357
358
# File 'lib/testcentricity_web/page_objects_helper.rb', line 356

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



368
369
370
# File 'lib/testcentricity_web/page_objects_helper.rb', line 368

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



240
241
242
243
244
# File 'lib/testcentricity_web/page_objects_helper.rb', line 240

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



139
140
141
# File 'lib/testcentricity_web/page_objects_helper.rb', line 139

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



152
153
154
155
156
# File 'lib/testcentricity_web/page_objects_helper.rb', line 152

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



379
380
381
# File 'lib/testcentricity_web/page_objects_helper.rb', line 379

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



383
384
385
386
387
# File 'lib/testcentricity_web/page_objects_helper.rb', line 383

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



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

def self.selectlist(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::SelectList.new("#{element_name}", self, "#{locator}", :page);end))
end

.selectlists(element_hash) ⇒ Object



223
224
225
226
227
# File 'lib/testcentricity_web/page_objects_helper.rb', line 223

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



201
202
203
# File 'lib/testcentricity_web/page_objects_helper.rb', line 201

def self.table(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Table.new("#{element_name}", self, "#{locator}", :page);end))
end

.tables(element_hash) ⇒ Object



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

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



82
83
84
# File 'lib/testcentricity_web/page_objects_helper.rb', line 82

def self.textfield(element_name, locator)
  class_eval(%(def #{element_name};@#{element_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



96
97
98
99
100
# File 'lib/testcentricity_web/page_objects_helper.rb', line 96

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/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)


444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
# File 'lib/testcentricity_web/page_objects_helper.rb', line 444

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



419
420
421
422
423
424
425
426
427
428
429
430
431
432
# File 'lib/testcentricity_web/page_objects_helper.rb', line 419

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
  PageManager.current_page = self
end


415
# File 'lib/testcentricity_web/page_objects_helper.rb', line 415

def navigate_to; end

#open_portalObject



389
390
391
392
393
394
395
396
397
398
399
400
# File 'lib/testcentricity_web/page_objects_helper.rb', line 389

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) ⇒ 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).

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



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
# File 'lib/testcentricity_web/page_objects_helper.rb', line 624

def populate_data_fields(data)
  data.each do |data_field, data_param|
    unless data_param.blank?
      # make sure the intended UI target element exists before trying to set its value
      data_field.wait_until_exists(2)
      if data_param == '!DELETE'
        length = data_field.get_value.length
        length.times do
          data_field.send_keys(:backspace)
        end
        sleep(0.5)
        data_field.send_keys(:tab)
      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)


467
468
469
# File 'lib/testcentricity_web/page_objects_helper.rb', line 467

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

#verify_page_contains(content) ⇒ Object



434
435
436
# File 'lib/testcentricity_web/page_objects_helper.rb', line 434

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

#verify_page_existsObject



402
403
404
405
406
407
408
409
410
411
412
413
# File 'lib/testcentricity_web/page_objects_helper.rb', line 402

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
end

#verify_page_uiObject



417
# File 'lib/testcentricity_web/page_objects_helper.rb', line 417

def verify_page_ui; end

#verify_ui_states(ui_states) ⇒ Object



471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
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
# File 'lib/testcentricity_web/page_objects_helper.rb', line 471

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 :width
        actual = ui_object.get_width
      when :height
        actual = ui_object.get_height
      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 :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

      if state.is_a?(Hash) && state.length == 1
        error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
        state.each do |key, value|
          case key
          when :lt, :less_than
            ExceptionQueue.enqueue_exception("#{error_msg} be less than #{value} but found '#{actual}'") unless actual < value
          when :lt_eq, :less_than_or_equal
            ExceptionQueue.enqueue_exception("#{error_msg} be less than or equal to #{value} but found '#{actual}'") unless actual <= value
          when :gt, :greater_than
            ExceptionQueue.enqueue_exception("#{error_msg} be greater than #{value} but found '#{actual}'") unless actual > value
          when :gt_eq, :greater_than_or_equal
            ExceptionQueue.enqueue_exception("#{error_msg} be greater than or equal to  #{value} but found '#{actual}'") unless actual >= value
          when :starts_with
            ExceptionQueue.enqueue_exception("#{error_msg} start with '#{value}' but found '#{actual}'") unless actual.start_with?(value)
          when :ends_with
            ExceptionQueue.enqueue_exception("#{error_msg} end with '#{value}' but found '#{actual}'") unless actual.end_with?(value)
          when :contains
            ExceptionQueue.enqueue_exception("#{error_msg} contain '#{value}' but found '#{actual}'") unless actual.include?(value)
          when :not_contains, :does_not_contain
            ExceptionQueue.enqueue_exception("#{error_msg} not contain '#{value}' but found '#{actual}'") if actual.include?(value)
          when :not_equal
            ExceptionQueue.enqueue_exception("#{error_msg} not equal '#{value}' but found '#{actual}'") if actual == value
          when :like, :is_like
            actual_like = actual.delete("\n")
            actual_like = actual_like.delete("\r")
            actual_like = actual_like.delete("\t")
            actual_like = actual_like.delete(' ')
            actual_like = actual_like.downcase
            expected    = value.delete("\n")
            expected    = expected.delete("\r")
            expected    = expected.delete("\t")
            expected    = expected.delete(' ')
            expected    = expected.downcase
            ExceptionQueue.enqueue_exception("#{error_msg} be like '#{value}' but found '#{actual}'") unless actual_like.include?(expected)
          when :translate
            expected = I18n.t(value)
            ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) translated #{property} property")
          end
        end
      else
        ExceptionQueue.enqueue_assert_equal(state, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property")
      end
    end
  end
  ExceptionQueue.post_exceptions
end