Class: TestCentricity::PageSection

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, parent, locator, context) ⇒ PageSection

Returns a new instance of PageSection.



12
13
14
15
16
17
# File 'lib/testcentricity_web/page_sections_helper.rb', line 12

def initialize(name, parent, locator, context)
  @name    = name
  @parent  = parent
  @locator = locator
  @context = context
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



9
10
11
# File 'lib/testcentricity_web/page_sections_helper.rb', line 9

def context
  @context
end

#locatorObject (readonly)

Returns the value of attribute locator.



9
10
11
# File 'lib/testcentricity_web/page_sections_helper.rb', line 9

def locator
  @locator
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/testcentricity_web/page_sections_helper.rb', line 9

def name
  @name
end

#parentObject

Returns the value of attribute parent.



10
11
12
# File 'lib/testcentricity_web/page_sections_helper.rb', line 10

def parent
  @parent
end

Class Method Details

.button(element_name, locator) ⇒ Object

Declare and instantiate a single button UI Element for this page section.

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



69
70
71
# File 'lib/testcentricity_web/page_sections_helper.rb', line 69

def self.button(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Button.new("#{element_name}", self, "#{locator}", :section);end))
end

.buttons(element_hash) ⇒ Object

Declare and instantiate a collection of buttons for this page section.

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



81
82
83
84
85
# File 'lib/testcentricity_web/page_sections_helper.rb', line 81

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 section.

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



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

def self.cell_button(element_name, locator, table, column)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellButton.new("#{element_name}", self, "#{locator}", :section, #{table}, #{column});end))
end

.cell_checkbox(element_name, locator, table, column) ⇒ Object

Declare and instantiate a cell checkbox in a table column on this page section.

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



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

def self.cell_checkbox(element_name, locator, table, column)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellCheckBox.new("#{element_name}", self, "#{locator}", :section, #{table}, #{column});end))
end

.cell_radio(element_name, locator, table, column) ⇒ Object

Declare and instantiate a cell radio in a table column on this page section.

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



330
331
332
# File 'lib/testcentricity_web/page_sections_helper.rb', line 330

def self.cell_radio(element_name, locator, table, column)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellRadio.new("#{element_name}", self, "#{locator}", :section, #{table}, #{column});end))
end

.checkbox(element_name, locator, proxy = nil) ⇒ Object

Declare and instantiate a single checkbox UI Element for this page section.

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



124
125
126
# File 'lib/testcentricity_web/page_sections_helper.rb', line 124

def self.checkbox(element_name, locator, proxy = nil)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CheckBox.new("#{element_name}", self, "#{locator}", :section, #{proxy});end))
end

.checkboxes(element_hash) ⇒ Object

Declare and instantiate a collection of checkboxes for this page section.

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



137
138
139
140
141
# File 'lib/testcentricity_web/page_sections_helper.rb', line 137

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 section.

Examples:

element :undo_record_item,  "//li[@rn='Undo Record']/a"
element :basket_header,     'div.basket_header'

Parameters:

  • element_name (Symbol)

    name of UI object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies object



43
44
45
# File 'lib/testcentricity_web/page_sections_helper.rb', line 43

def self.element(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::UIElement.new("#{element_name}", self, "#{locator}", :section);end))
end

.elements(element_hash) ⇒ Object

Declare and instantiate a collection of generic UI Elements for this page section.

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



55
56
57
58
59
# File 'lib/testcentricity_web/page_sections_helper.rb', line 55

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 section.

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



284
285
286
# File 'lib/testcentricity_web/page_sections_helper.rb', line 284

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

.filefields(element_hash) ⇒ Object



288
289
290
291
292
# File 'lib/testcentricity_web/page_sections_helper.rb', line 288

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 section.

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



267
268
269
# File 'lib/testcentricity_web/page_sections_helper.rb', line 267

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

.images(element_hash) ⇒ Object



271
272
273
274
275
# File 'lib/testcentricity_web/page_sections_helper.rb', line 271

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 section.

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



179
180
181
# File 'lib/testcentricity_web/page_sections_helper.rb', line 179

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

.labels(element_hash) ⇒ Object



183
184
185
186
187
# File 'lib/testcentricity_web/page_sections_helper.rb', line 183

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 section.

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



197
198
199
# File 'lib/testcentricity_web/page_sections_helper.rb', line 197

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


201
202
203
204
205
# File 'lib/testcentricity_web/page_sections_helper.rb', line 201

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 section.

Examples:

list :y_axis_list, 'g.y_axis'

Parameters:

  • element_name (Symbol)

    name of list object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies object



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

def self.list(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::List.new("#{element_name}", self, "#{locator}", :section);end))
end

.list_button(element_name, locator, list) ⇒ Object

Declare and instantiate a list button in a row of a list object on this section 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



343
344
345
# File 'lib/testcentricity_web/page_sections_helper.rb', line 343

def self.list_button(element_name, locator, list)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::ListButton.new("#{element_name}", self, "#{locator}", :section, #{list});end))
end

.list_checkbox(element_name, locator, list) ⇒ Object

Declare and instantiate a list checkbox in a row of a list object on this section 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



355
356
357
# File 'lib/testcentricity_web/page_sections_helper.rb', line 355

def self.list_checkbox(element_name, locator, list)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::ListCheckBox.new("#{element_name}", self, "#{locator}", :section, #{list});end))
end

.list_radio(element_name, locator, list) ⇒ Object

Declare and instantiate a list radio in a row of a list object on this section 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



367
368
369
# File 'lib/testcentricity_web/page_sections_helper.rb', line 367

def self.list_radio(element_name, locator, list)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellRadio.new("#{element_name}", self, "#{locator}", :section, #{list});end))
end

.lists(element_hash) ⇒ Object



253
254
255
256
257
# File 'lib/testcentricity_web/page_sections_helper.rb', line 253

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 section.

Examples:

radio :accept_terms_radio,  "//input[@id='Accept_Terms']"
radio :decline_terms_radio, 'input#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



152
153
154
# File 'lib/testcentricity_web/page_sections_helper.rb', line 152

def self.radio(element_name, locator, proxy = nil)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Radio.new("#{element_name}", self, "#{locator}", :section, #{proxy});end))
end

.radios(element_hash) ⇒ Object

Declare and instantiate a collection of radio buttons for this page section.

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



165
166
167
168
169
# File 'lib/testcentricity_web/page_sections_helper.rb', line 165

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 within this PageSection 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



378
379
380
# File 'lib/testcentricity_web/page_sections_helper.rb', line 378

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

.sections(section_hash) ⇒ Object



382
383
384
385
386
# File 'lib/testcentricity_web/page_sections_helper.rb', line 382

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 section.

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



232
233
234
# File 'lib/testcentricity_web/page_sections_helper.rb', line 232

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

.selectlists(element_hash) ⇒ Object



236
237
238
239
240
# File 'lib/testcentricity_web/page_sections_helper.rb', line 236

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 section.

Examples:

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

Parameters:

  • element_name (Symbol)

    name of table object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies object



214
215
216
# File 'lib/testcentricity_web/page_sections_helper.rb', line 214

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

.tables(element_hash) ⇒ Object



218
219
220
221
222
# File 'lib/testcentricity_web/page_sections_helper.rb', line 218

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 section.

Examples:

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

Parameters:

  • element_name (Symbol)

    name of text field object (as a symbol)

  • locator (String)

    CSS selector or XPath expression that uniquely identifies object



95
96
97
# File 'lib/testcentricity_web/page_sections_helper.rb', line 95

def self.textfield(element_name, locator)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::TextField.new("#{element_name}", self, "#{locator}", :section);end))
end

.textfields(element_hash) ⇒ Object

Declare and instantiate a collection of text fields for this page section.

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



109
110
111
112
113
# File 'lib/testcentricity_web/page_sections_helper.rb', line 109

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 section.

Examples:

trait(:section_locator)  { "//div[@class='Messaging_Applet']" }
trait(:list_table_name)  { '#Messages' }

Parameters:

  • trait_name (Symbol)

    name of trait (as a symbol)

  • block (&block)

    trait value



31
32
33
# File 'lib/testcentricity_web/page_sections_helper.rb', line 31

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

Instance Method Details

#click_at(x, y) ⇒ Object

Click at a specific location within a Section object

Examples:

bar_chart_section.click_at(10, 10)

Parameters:

  • x (Integer)

    X offset

  • y (Integer)

    Y offset



530
531
532
533
534
# File 'lib/testcentricity_web/page_sections_helper.rb', line 530

def click_at(x, y)
  section, = find_section
  raise "Section object '#{get_name}' (#{get_locator}) not found" unless section
  section.click_at(x, y)
end

#disabled?Boolean

Is Section object disabled (not enabled)?

Examples:

bar_chart_section.disabled?

Returns:

  • (Boolean)


436
437
438
439
440
# File 'lib/testcentricity_web/page_sections_helper.rb', line 436

def disabled?
  obj, = find_element
  object_not_found_exception(obj, nil)
  obj.disabled?
end

#enabled?Boolean

Is Section object enabled?

Examples:

bar_chart_section.enabled?

Returns:

  • (Boolean)


426
427
428
# File 'lib/testcentricity_web/page_sections_helper.rb', line 426

def enabled?
  !disabled?
end

#exists?Boolean

Does Section object exists?

Examples:

navigation_toolbar.exists?

Returns:

  • (Boolean)


415
416
417
418
# File 'lib/testcentricity_web/page_sections_helper.rb', line 415

def exists?
  section, = find_section
  section != nil
end

#get_attribute(attrib) ⇒ Object



709
710
711
712
713
# File 'lib/testcentricity_web/page_sections_helper.rb', line 709

def get_attribute(attrib)
  section, = find_section
  raise "Section object '#{get_name}' (#{get_locator}) not found" unless section
  section[attrib]
end

#get_locatorObject



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

def get_locator
  if @locator.empty? && defined?(section_locator)
    locator = section_locator
  else
    locator = @locator
  end
  if @context == :section && !@parent.nil? && !@parent.get_locator.nil?
    "#{@parent.get_locator}|#{locator}"
  else
    locator
  end
end

#get_nameObject



401
402
403
# File 'lib/testcentricity_web/page_sections_helper.rb', line 401

def get_name
  @name
end

#get_native_attribute(attrib) ⇒ Object



715
716
717
718
719
# File 'lib/testcentricity_web/page_sections_helper.rb', line 715

def get_native_attribute(attrib)
  section, = find_section
  raise "Section object '#{get_name}' (#{get_locator}) not found" unless section
  section.native.attribute(attrib)
end

#get_object_typeObject



19
20
21
# File 'lib/testcentricity_web/page_sections_helper.rb', line 19

def get_object_type
  :section
end

#hidden?Boolean

Is Section object hidden (not visible)?

Examples:

navigation_toolbar.hidden?

Returns:

  • (Boolean)


463
464
465
# File 'lib/testcentricity_web/page_sections_helper.rb', line 463

def hidden?
  !visible?
end

#populate_data_fields(data) ⇒ Object

Populate the specified UI elements in this Section object 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)

Examples:

data = { prefix_select      => 'Mr.',
         first_name_field   => 'Ignatious',
         last_name_field    => 'Snickelfritz',
         gender_select      => 'Male',
         dob_field          => '12/14/1957',
         organ_donor_check  => 'Yes',
         dnr_on_file_check  => 'Yes'
       }
populate_data_fields(data)

Parameters:

  • data (Hash)

    UI element(s) and associated data to be entered



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

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'
        data_field.set('')
      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

#set_parent(parent) ⇒ Object



405
406
407
# File 'lib/testcentricity_web/page_sections_helper.rb', line 405

def set_parent(parent)
  @parent = parent
end

#verify_ui_states(ui_states) ⇒ Object



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

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 :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

#visible?Boolean

Is Section object visible?

Examples:

navigation_toolbar.visible?

Returns:

  • (Boolean)


448
449
450
451
452
453
454
455
# File 'lib/testcentricity_web/page_sections_helper.rb', line 448

def visible?
  section, = find_section
  exists = section
  visible = false
  visible = section.visible? if exists
  # the section is visible if it exists and it is not invisible
  exists && visible ? true : false
end

#wait_until_exists(seconds = nil) ⇒ Object

Wait until the Section object exists, or until the specified wait time has expired.

Examples:

navigation_toolbar.wait_until_exists(0.5)

Parameters:

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

    wait time in seconds



473
474
475
476
477
478
479
# File 'lib/testcentricity_web/page_sections_helper.rb', line 473

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 "Could not find Section object '#{get_name}' (#{get_locator}) after #{timeout} seconds" unless exists?
end

#wait_until_gone(seconds = nil) ⇒ Object

Wait until the Section object no longer exists, or until the specified wait time has expired.

Examples:

navigation_toolbar.wait_until_gone(5)

Parameters:

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

    wait time in seconds



487
488
489
490
491
492
493
# File 'lib/testcentricity_web/page_sections_helper.rb', line 487

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 "Section object '#{get_name}' (#{get_locator}) remained visible after #{timeout} seconds" if exists?
end

#wait_until_hidden(seconds = nil) ⇒ Object

Wait until the Section object is hidden, or until the specified wait time has expired.

Examples:

bar_chart_section.wait_until_hidden(10)

Parameters:

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

    wait time in seconds



515
516
517
518
519
520
521
# File 'lib/testcentricity_web/page_sections_helper.rb', line 515

def wait_until_hidden(seconds = nil)
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { hidden? }
rescue
  raise "Section object '#{get_name}' (#{get_locator}) remained visible after #{timeout} seconds" if visible?
end

#wait_until_visible(seconds = nil) ⇒ Object

Wait until the Section object is visible, or until the specified wait time has expired.

Examples:

bar_chart_section.wait_until_visible(0.5)

Parameters:

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

    wait time in seconds



501
502
503
504
505
506
507
# File 'lib/testcentricity_web/page_sections_helper.rb', line 501

def wait_until_visible(seconds = nil)
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { visible? }
rescue
  raise "Could not find Section object '#{get_name}' (#{get_locator}) after #{timeout} seconds" unless visible?
end