class TestCentricity::PageSection

Constants

CSS_SELECTORS
XPATH_SELECTORS

Attributes

context[R]
list_index[RW]
locator[RW]
locator_type[RW]
name[R]
parent[RW]
parent_list[RW]

Public Class Methods

audio(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of an HTML5 audio object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

audio :audio_player, 'audio#my_audio_player'
# File lib/testcentricity_web/web_core/page_section.rb, line 387
def self.audio(element_name, locator)
  define_element(element_name, TestCentricity::Audio, locator)
end
audios(element_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 391
def self.audios(element_hash)
  element_hash.each(&method(:audio))
end
button(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of button object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

button :checkout_button, 'button.checkout_button'
button :login_button,    "//input[@id='submit_button']"
# File lib/testcentricity_web/web_core/page_section.rb, line 154
def self.button(element_name, locator)
  define_element(element_name, TestCentricity::Button, locator)
end
buttons(element_hash) click to toggle source

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

@param element_hash [Hash] names of buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies buttons @example

buttons new_account_button:  'button#new-account',
        save_button:         'button#save',
        cancel_button:       'button#cancel'
# File lib/testcentricity_web/web_core/page_section.rb, line 166
def self.buttons(element_hash)
  element_hash.each(&method(:button))
end
checkbox(element_name, locator, proxy = nil) click to toggle source

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

@param element_name [Symbol] name of checkbox object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions @example

checkbox :remember_checkbox,     "//input[@id='RememberUser']"
checkbox :accept_terms_checkbox, 'input#accept_terms_conditions', :accept_terms_label
# File lib/testcentricity_web/web_core/page_section.rb, line 228
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) click to toggle source

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

@param element_hash [Hash] names of checkboxes (as a symbol) and CSS selectors or XPath expressions that uniquely identifies checkboxes @example

checkboxes  hazmat_certified_check:  'input#hazmatCertified',
            epa_certified_check:     'input#epaCertified',
            dhs_certified_check:     'input#homelandSecurityCertified',
            carb_compliant_check:    'input#carbCompliant'
# File lib/testcentricity_web/web_core/page_section.rb, line 241
def self.checkboxes(element_hash)
  element_hash.each(&method(:checkbox))
end
element(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of UI object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

element :undo_record_item,  "//li[@rn='Undo Record']/a"
element :basket_header,     'div.basket_header'
# File lib/testcentricity_web/web_core/page_section.rb, line 130
def self.element(element_name, locator)
  define_element(element_name, TestCentricity::UIElement, locator)
end
elements(element_hash) click to toggle source

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

@param element_hash [Hash] names of UI objects (as a symbol) and CSS selectors or XPath expressions that uniquely identifies objects @example

elements  profile_item:  'a#profile',
          settings_item: 'a#userPreferencesTrigger',
          log_out_item:  'a#logout'
# File lib/testcentricity_web/web_core/page_section.rb, line 142
def self.elements(element_hash)
  element_hash.each(&method(:element))
end
filefield(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of file field object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

filefield :attach_file, 's_SweFileName'
# File lib/testcentricity_web/web_core/page_section.rb, line 402
def self.filefield(element_name, locator)
  define_element(element_name, TestCentricity::FileField, locator)
end
filefields(element_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 406
def self.filefields(element_hash)
  element_hash.each(&method(:filefield))
end
image(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of image object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

image :basket_item_image,    'div.product_image'
image :corporate_logo_image, "//img[@alt='MyCompany_logo']"
# File lib/testcentricity_web/web_core/page_section.rb, line 357
def self.image(element_name, locator)
  define_element(element_name, TestCentricity::Image, locator)
end
images(element_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 361
def self.images(element_hash)
  element_hash.each(&method(:image))
end
label(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of label object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

label :welcome_label,      'div.Welcome'
label :rollup_price_label, "//div[contains(@id, 'Rollup Item Price')]"
# File lib/testcentricity_web/web_core/page_section.rb, line 279
def self.label(element_name, locator)
  define_element(element_name, TestCentricity::Label, locator)
end
labels(element_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 283
def self.labels(element_hash)
  element_hash.each(&method(:label))
end
list(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of list object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

list :y_axis_list, 'g.y_axis'
# File lib/testcentricity_web/web_core/page_section.rb, line 341
def self.list(element_name, locator)
  define_element(element_name, TestCentricity::List, locator)
end
lists(element_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 345
def self.lists(element_hash)
  element_hash.each(&method(:list))
end
new(name, parent, locator, context) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 13
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) }
  @locator_type = if is_xpath && !is_css
                    :xpath
                  elsif is_css && !is_xpath
                    :css
                  elsif !is_css && !is_xpath
                    :css
                  else
                    :css
                  end
end
radio(element_name, locator, proxy = nil) click to toggle source

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

@param element_name [Symbol] name of radio object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions @example

radio :accept_terms_radio,  "//input[@id='Accept_Terms']"
radio :decline_terms_radio, 'input#decline_terms_conditions', :decline_terms_label
# File lib/testcentricity_web/web_core/page_section.rb, line 254
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) click to toggle source

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

@param element_hash [Hash] names of radio buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies radio buttons @example

radios  visa_radio:       'input#payWithVisa',
        mastercard_radio: 'input#payWithMastercard',
        discover_radio:   'input#payWithDiscover',
        amex_radio:       'input#payWithAmEx'
# File lib/testcentricity_web/web_core/page_section.rb, line 267
def self.radios(element_hash)
  element_hash.each(&method(:radio))
end
range(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of range input object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

range :volume_level, "//input[@id='volume_slider']"
range :points_slider, 'input#points'
# File lib/testcentricity_web/web_core/page_section.rb, line 204
def self.range(element_name, locator)
  define_element(element_name, TestCentricity::Range, locator)
end
ranges(element_hash) click to toggle source

Declare and instantiate a collection of range inputs for this page section.

@param element_hash [Hash] names of ranges (as a symbol) and CSS selectors or XPath expressions that uniquely identifies the ranges @example

ranges points_slider: 'input#points',
       risk_slider:   'input#risk_percentage'
# File lib/testcentricity_web/web_core/page_section.rb, line 215
def self.ranges(element_hash)
  element_hash.each(&method(:range))
end
section(section_name, obj, locator = nil) click to toggle source

Instantiate a single PageSection object within this PageSection object.

@param section_name [Symbol] name of PageSection object (as a symbol) @param class_name [String] Class name of PageSection object @example

section :search_form, SearchForm
# File lib/testcentricity_web/web_core/page_section.rb, line 417
def self.section(section_name, obj, locator = nil)
  define_method(section_name) do
    ivar_name = "@#{section_name}"
    ivar = instance_variable_get(ivar_name)
    return ivar if ivar
    instance_variable_set(ivar_name, obj.new(section_name, self, "#{locator}", :section))
  end
end
sections(section_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 426
def self.sections(section_hash)
  section_hash.each do |section_name, class_name|
    section(section_name, class_name)
  end
end
selectlist(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of select list object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

selectlist :category_selector, 'select#search_form_category_chosen'
selectlist :gender_select,     "//select[@id='customer_gender']"
# File lib/testcentricity_web/web_core/page_section.rb, line 326
def self.selectlist(element_name, locator)
  define_element(element_name, TestCentricity::SelectList, locator)
end
selectlists(element_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 330
def self.selectlists(element_hash)
  element_hash.each(&method(:selectlist))
end
table(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of table object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

table :payments_table, "//table[@class='payments_table']"
# File lib/testcentricity_web/web_core/page_section.rb, line 310
def self.table(element_name, locator)
  define_element(element_name, TestCentricity::Table, locator)
end
tables(element_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 314
def self.tables(element_hash)
  element_hash.each(&method(:table))
end
textfield(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of text field object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

textfield :user_id_field,  "//input[@id='UserName']"
textfield :password_field, 'input#consumer_password'
# File lib/testcentricity_web/web_core/page_section.rb, line 178
def self.textfield(element_name, locator)
  define_element(element_name, TestCentricity::TextField, locator)
end
textfields(element_hash) click to toggle source

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

@param element_hash [Hash] names of text fields (as a symbol) and CSS selectors or XPath expressions that uniquely identifies text fields @example

textfields  name_field:    'input#Name',
            title_field:   'input#Title',
            phone_field:   'input#PhoneNumber',
            fax_field:     'input#FaxNumber',
            email_field:   'input#Email'
# File lib/testcentricity_web/web_core/page_section.rb, line 192
def self.textfields(element_hash)
  element_hash.each(&method(:textfield))
end
video(element_name, locator) click to toggle source

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

@param element_name [Symbol] name of video object (as a symbol) @param locator [String] CSS selector or XPath expression that uniquely identifies object @example

video :video_player, 'video#my_video_player'
# File lib/testcentricity_web/web_core/page_section.rb, line 372
def self.video(element_name, locator)
  define_element(element_name, TestCentricity::Video, locator)
end
videos(element_hash) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 376
def self.videos(element_hash)
  element_hash.each(&method(:video))
end

Private Class Methods

define_element(element_name, obj, locator) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 678
def self.define_element(element_name, obj, 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, obj.new(element_name, self, locator, :section))
  end
end

Public Instance Methods

click() click to toggle source

Click on a Section object

@example

bar_chart_section.click
# File lib/testcentricity_web/web_core/page_section.rb, line 583
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) click to toggle source

Click at a specific location within a Section object

@param x [Integer] X offset @param y [Integer] Y offset @example

bar_chart_section.click_at(10, 10)
# File lib/testcentricity_web/web_core/page_section.rb, line 622
def click_at(x, y)
  section, = find_section
  section_not_found_exception(section)
  section.click_at(x, y)
end
disabled?() click to toggle source

Is Section object disabled (not enabled)?

@return [Boolean] @example

bar_chart_section.disabled?
# File lib/testcentricity_web/web_core/page_section.rb, line 459
def disabled?
  section, = find_section
  section_not_found_exception(section)
  section.disabled?
end
displayed?() click to toggle source

Is section object displayed in browser window?

@return [Boolean] @example

navigation_toolbar.displayed??
# File lib/testcentricity_web/web_core/page_section.rb, line 496
def displayed?
  section, = find_section
  section_not_found_exception(section)
  section.displayed?
end
double_click() click to toggle source

Double-click on a Section object

@example

bar_chart_section.double_click
# File lib/testcentricity_web/web_core/page_section.rb, line 598
def double_click
  section, = find_section
  section_not_found_exception(section)
  page.driver.browser.action.double_click(section.native).perform
end
enabled?() click to toggle source

Is Section object enabled?

@return [Boolean] @example

bar_chart_section.enabled?
# File lib/testcentricity_web/web_core/page_section.rb, line 449
def enabled?
  !disabled?
end
exists?() click to toggle source

Does Section object exists?

@return [Boolean] @example

navigation_toolbar.exists?
# File lib/testcentricity_web/web_core/page_section.rb, line 438
def exists?
  section, = find_section
  section != nil
end
get_all_items_count() click to toggle source
# File lib/testcentricity_web/web_core/page_section.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_items() click to toggle source
# File lib/testcentricity_web/web_core/page_section.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) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 651
def get_attribute(attrib)
  section, = find_section
  section_not_found_exception(section)
  section[attrib]
end
get_item_count() click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 75
def get_item_count
  raise 'No parent list defined' if @parent_list.nil?
  @parent_list.get_item_count
end
get_list_items() click to toggle source
# File lib/testcentricity_web/web_core/page_section.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_locator() click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 34
def get_locator
  locator = if @locator.empty? && defined?(section_locator)
              section_locator
            else
              @locator
            end
  unless @parent_list.nil?
    locator = if @locator_type == @parent_list.get_locator_type
                "#{@parent_list.get_locator} #{locator}"
              else
                "#{@parent_list.get_locator}|#{locator}"
              end
    unless @list_index.nil?
      locator = if @locator_type == :xpath
                  "#{locator}[#{@list_index}]"
                else
                  "#{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_type() click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 62
def get_locator_type
  @locator_type
end
get_name() click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 114
def get_name
  @name
end
get_native_attribute(attrib) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 657
def get_native_attribute(attrib)
  section, = find_section
  section_not_found_exception(section)
  section.native.attribute(attrib)
end
get_object_type() click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 110
def get_object_type
  :section
end
get_parent_list() click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 66
def get_parent_list
  @parent_list
end
hidden?() click to toggle source

Is Section object hidden (not visible)?

@return [Boolean] @example

navigation_toolbar.hidden?
# File lib/testcentricity_web/web_core/page_section.rb, line 486
def hidden?
  !visible?
end
hover() click to toggle source

Hover the cursor over a Section object

@example

bar_chart_section.hover
# File lib/testcentricity_web/web_core/page_section.rb, line 645
def hover
  section, = find_section
  section_not_found_exception(section)
  section.hover
end
right_click() click to toggle source

Right-click on a Section object

@example

bar_chart_section.right_click
# File lib/testcentricity_web/web_core/page_section.rb, line 609
def right_click
  section, = find_section
  section_not_found_exception(section)
  page.driver.browser.action.context_click(section.native).perform
end
send_keys(*keys) click to toggle source

Send keystrokes to a Section object

@param keys [String] keys @example

bar_chart_section.send_keys(:enter)
# File lib/testcentricity_web/web_core/page_section.rb, line 634
def send_keys(*keys)
  section, = find_section
  section_not_found_exception(section)
  section.send_keys(*keys)
end
set_list_index(list, index = 1) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 70
def set_list_index(list, index = 1)
  @parent_list = list unless list.nil?
  @list_index  = index
end
set_parent(parent) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 118
def set_parent(parent)
  @parent = parent
end
verify_list_items(expected, enqueue = false) click to toggle source
# File lib/testcentricity_web/web_core/page_section.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
visible?() click to toggle source

Is Section object visible?

@return [Boolean] @example

navigation_toolbar.visible?
# File lib/testcentricity_web/web_core/page_section.rb, line 471
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, post_exception = true) click to toggle source

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.

@param seconds [Integer or Float] wait time in seconds @example

navigation_toolbar.wait_until_exists(0.5)
# File lib/testcentricity_web/web_core/page_section.rb, line 509
def wait_until_exists(seconds = nil, post_exception = true)
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { exists? }
rescue
  if post_exception
    raise "Could not find Section object '#{get_name}' (#{get_locator}) after #{timeout} seconds" unless exists?
  else
    exists?
  end
end
wait_until_gone(seconds = nil, post_exception = true) click to toggle source

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.

@param seconds [Integer or Float] wait time in seconds @example

navigation_toolbar.wait_until_gone(5)
# File lib/testcentricity_web/web_core/page_section.rb, line 528
def wait_until_gone(seconds = nil, post_exception = true)
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { !exists? }
rescue
  if post_exception
    raise "Section object '#{get_name}' (#{get_locator}) remained visible after #{timeout} seconds" if exists?
  else
    exists?
  end
end
wait_until_hidden(seconds = nil, post_exception = true) click to toggle source

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.

@param seconds [Integer or Float] wait time in seconds @example

bar_chart_section.wait_until_hidden(10)
# File lib/testcentricity_web/web_core/page_section.rb, line 566
def wait_until_hidden(seconds = nil, post_exception = true)
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { hidden? }
rescue
  if post_exception
    raise "Section object '#{get_name}' (#{get_locator}) remained visible after #{timeout} seconds" if visible?
  else
    visible?
  end
end
wait_until_visible(seconds = nil, post_exception = true) click to toggle source

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.

@param seconds [Integer or Float] wait time in seconds @example

bar_chart_section.wait_until_visible(0.5)
# File lib/testcentricity_web/web_core/page_section.rb, line 547
def wait_until_visible(seconds = nil, post_exception = true)
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { visible? }
rescue
  if post_exception
    raise "Could not find Section object '#{get_name}' (#{get_locator}) after #{timeout} seconds" unless visible?
  else
    visible?
  end
end

Private Instance Methods

find_section() click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 665
def find_section
  locator = get_locator
  locator = locator.tr('|', ' ')
  obj = page.find(@locator_type, locator, wait: 0.1)
  [obj, @locator_type]
rescue
  [nil, nil]
end
section_not_found_exception(section) click to toggle source
# File lib/testcentricity_web/web_core/page_section.rb, line 674
def section_not_found_exception(section)
  raise ObjectNotFoundError.new("Section object '#{get_name}' (#{get_locator}) not found") unless section
end