Class: TestCentricity::PageSection

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

Constant Summary collapse

XPATH_SELECTORS =
['//', '[@', '[contains(@']
CSS_SELECTORS =
['#', ':nth-child(', ':nth-of-type(', '^=', '$=', '*=']

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.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 19

def initialize(name, parent, locator, context)
  @name         = name
  @parent       = parent
  @locator      = locator
  @context      = context
  @parent_list  = nil
  @list_index   = nil

  is_xpath = XPATH_SELECTORS.any? { |selector| @locator.include?(selector) }
  is_css = CSS_SELECTORS.any? { |selector| @locator.include?(selector) }
  if is_xpath && !is_css
    @locator_type = :xpath
  elsif is_css && !is_xpath
    @locator_type = :css
  elsif !is_css && !is_xpath
    @locator_type = :css
  else
    raise "Cannot determine type of locator for PageSection '#{@name}' - locator = #{@locator}"
  end
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



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

def context
  @context
end

#list_indexObject

Returns the value of attribute list_index.



13
14
15
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 13

def list_index
  @list_index
end

#locatorObject

Returns the value of attribute locator.



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

def locator
  @locator
end

#locator_typeObject

Returns the value of attribute locator_type.



14
15
16
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 14

def locator_type
  @locator_type
end

#nameObject (readonly)

Returns the value of attribute name.



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

def name
  @name
end

#parentObject

Returns the value of attribute parent.



11
12
13
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 11

def parent
  @parent
end

#parent_listObject

Returns the value of attribute parent_list.



12
13
14
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 12

def parent_list
  @parent_list
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



173
174
175
176
177
178
179
180
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 173

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



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

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



453
454
455
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 453

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, proxy = nil) ⇒ 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



466
467
468
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 466

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}", :section, #{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



493
494
495
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 493

def self.cell_image(element_name, locator, table, column)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CellImage.new("#{element_name}", self, "#{locator}", :section, #{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 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



479
480
481
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 479

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}", :section, #{table}, #{column}, #{proxy});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



238
239
240
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 238

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



251
252
253
254
255
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 251

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



142
143
144
145
146
147
148
149
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 142

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



159
160
161
162
163
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 159

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



428
429
430
431
432
433
434
435
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 428

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, :section))
  end
end

.filefields(element_hash) ⇒ Object



437
438
439
440
441
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 437

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



406
407
408
409
410
411
412
413
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 406

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, :section))
  end
end

.images(element_hash) ⇒ Object



415
416
417
418
419
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 415

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



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

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, :section))
  end
end

.labels(element_hash) ⇒ Object



302
303
304
305
306
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 302

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



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

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, :section))
  end
end


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

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



383
384
385
386
387
388
389
390
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 383

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



506
507
508
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 506

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, proxy = nil) ⇒ 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



518
519
520
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 518

def self.list_checkbox(element_name, locator, list, proxy = nil)
  class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::ListCheckBox.new("#{element_name}", self, "#{locator}", :section, #{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 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



530
531
532
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 530

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

.lists(element_hash) ⇒ Object



392
393
394
395
396
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 392

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



266
267
268
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 266

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



279
280
281
282
283
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 279

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



541
542
543
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 541

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



545
546
547
548
549
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 545

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



361
362
363
364
365
366
367
368
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 361

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, :section))
  end
end

.selectlists(element_hash) ⇒ Object



370
371
372
373
374
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 370

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



338
339
340
341
342
343
344
345
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 338

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, :section))
  end
end

.tables(element_hash) ⇒ Object



347
348
349
350
351
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 347

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



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

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



223
224
225
226
227
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 223

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



130
131
132
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 130

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

Instance Method Details

#clickObject

Click on a Section object

Examples:

bar_chart_section.click


686
687
688
689
690
691
692
693
694
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 686

def click
  section, = find_section
  section_not_found_exception(section)
  begin
    section.click
  rescue
    section.click_at(10, 10) unless Capybara.current_driver == :poltergeist
  end
end

#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



725
726
727
728
729
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 725

def click_at(x, y)
  section, = find_section
  section_not_found_exception(section)
  section.click_at(x, y)
end

#disabled?Boolean

Is Section object disabled (not enabled)?

Examples:

bar_chart_section.disabled?

Returns:

  • (Boolean)


578
579
580
581
582
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 578

def disabled?
  section, = find_section
  section_not_found_exception(section)
  section.disabled?
end

#displayed?Boolean

Is section object displayed in browser window?

Examples:

navigation_toolbar.displayed??

Returns:

  • (Boolean)


615
616
617
618
619
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 615

def displayed?
  section, = find_section
  section_not_found_exception(section)
  section.displayed?
end

#double_clickObject

Double-click on a Section object

Examples:

bar_chart_section.double_click


701
702
703
704
705
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 701

def double_click
  section, = find_section
  section_not_found_exception(section)
  page.driver.browser.action.double_click(section.native).perform
end

#enabled?Boolean

Is Section object enabled?

Examples:

bar_chart_section.enabled?

Returns:

  • (Boolean)


568
569
570
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 568

def enabled?
  !disabled?
end

#exists?Boolean

Does Section object exists?

Examples:

navigation_toolbar.exists?

Returns:

  • (Boolean)


557
558
559
560
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 557

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

#get_all_items_countObject



89
90
91
92
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 89

def get_all_items_count
  raise 'No parent list defined' if @parent_list.nil?
  @parent_list.get_all_items_count
end

#get_all_list_itemsObject



94
95
96
97
98
99
100
101
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 94

def get_all_list_items
  items = []
  (1..get_all_items_count).each do |item|
    set_list_index(nil, item)
    items.push(get_value(:all))
  end
  items
end

#get_attribute(attrib) ⇒ Object



904
905
906
907
908
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 904

def get_attribute(attrib)
  section, = find_section
  section_not_found_exception(section)
  section[attrib]
end

#get_item_countObject



75
76
77
78
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 75

def get_item_count
  raise 'No parent list defined' if @parent_list.nil?
  @parent_list.get_item_count
end

#get_list_itemsObject



80
81
82
83
84
85
86
87
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 80

def get_list_items
  items = []
  (1..get_item_count).each do |item|
    set_list_index(nil, item)
    items.push(get_value)
  end
  items
end

#get_locatorObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 40

def get_locator
  if @locator.empty? && defined?(section_locator)
    locator = section_locator
  else
    locator = @locator
  end

  unless @parent_list.nil?
    locator = "#{@parent_list.get_locator}|#{locator}"
    unless @list_index.nil?
      case @locator_type
        when :xpath
          locator = "(#{locator})[#{@list_index}]"
        when :css
          locator = "#{locator}:nth-of-type(#{@list_index})"
      end
    end
  end

  if @context == :section && !@parent.nil? && !@parent.get_locator.nil?
    "#{@parent.get_locator}|#{locator}"
  else
    locator
  end
end

#get_locator_typeObject



66
67
68
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 66

def get_locator_type
  @locator_type
end

#get_nameObject



114
115
116
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 114

def get_name
  @name
end

#get_native_attribute(attrib) ⇒ Object



910
911
912
913
914
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 910

def get_native_attribute(attrib)
  section, = find_section
  section_not_found_exception(section)
  section.native.attribute(attrib)
end

#get_object_typeObject



110
111
112
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 110

def get_object_type
  :section
end

#hidden?Boolean

Is Section object hidden (not visible)?

Examples:

navigation_toolbar.hidden?

Returns:

  • (Boolean)


605
606
607
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 605

def hidden?
  !visible?
end

#populate_data_fields(data, wait_time = nil) ⇒ 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).

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:

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

  • wait_time (Integer) (defaults to: nil)

    wait time in seconds



876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 876

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

#right_clickObject

Right-click on a Section object

Examples:

bar_chart_section.right_click


712
713
714
715
716
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 712

def right_click
  section, = find_section
  section_not_found_exception(section)
  page.driver.browser.action.context_click(section.native).perform
end

#send_keys(*keys) ⇒ Object

Send keystrokes to a Section object

Examples:

bar_chart_section.send_keys(:enter)

Parameters:



737
738
739
740
741
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 737

def send_keys(*keys)
  section, = find_section
  section_not_found_exception(section)
  section.send_keys(*keys)
end

#set_list_index(list, index = 1) ⇒ Object



70
71
72
73
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 70

def set_list_index(list, index = 1)
  @parent_list = list unless list.nil?
  @list_index  = index
end

#set_parent(parent) ⇒ Object



118
119
120
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 118

def set_parent(parent)
  @parent = parent
end

#verify_list_items(expected, enqueue = false) ⇒ Object



103
104
105
106
107
108
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 103

def verify_list_items(expected, enqueue = false)
  actual = get_list_items
  enqueue ?
      ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected list '#{get_name}' (#{get_locator})") :
      assert_equal(expected, actual, "Expected list object '#{get_name}' (#{get_locator}) to be #{expected} but found #{actual}")
end

#verify_ui_states(ui_states) ⇒ Object



743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 743

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

#visible?Boolean

Is Section object visible?

Examples:

navigation_toolbar.visible?

Returns:

  • (Boolean)


590
591
592
593
594
595
596
597
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 590

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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.

Examples:

navigation_toolbar.wait_until_exists(0.5)

Parameters:

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

    wait time in seconds



628
629
630
631
632
633
634
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 628

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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.

Examples:

navigation_toolbar.wait_until_gone(5)

Parameters:

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

    wait time in seconds



643
644
645
646
647
648
649
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 643

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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.

Examples:

bar_chart_section.wait_until_hidden(10)

Parameters:

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

    wait time in seconds



673
674
675
676
677
678
679
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 673

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. If the wait time is nil, then the wait time will be Capybara.default_max_wait_time.

Examples:

bar_chart_section.wait_until_visible(0.5)

Parameters:

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

    wait time in seconds



658
659
660
661
662
663
664
# File 'lib/testcentricity/web_core/page_sections_helper.rb', line 658

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