Class: TestCentricity::PageSection

Inherits:
Object
  • Object
show all
Includes:
Capybara::DSL, Capybara::Node::Matchers, RSpec::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(parent, locator, context) ⇒ PageSection

Returns a new instance of PageSection.



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

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

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



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

def context
  @context
end

#locatorObject (readonly)

Returns the value of attribute locator.



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

def locator
  @locator
end

#parentObject

Returns the value of attribute parent.



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

def parent
  @parent
end

Class Method Details

.button(element_name, locator) ⇒ Object



25
26
27
# File 'lib/testcentricity_web/page_sections_helper.rb', line 25

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

.checkbox(element_name, locator) ⇒ Object



33
34
35
# File 'lib/testcentricity_web/page_sections_helper.rb', line 33

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

.element(element_name, locator) ⇒ Object



21
22
23
# File 'lib/testcentricity_web/page_sections_helper.rb', line 21

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

.image(element_name, locator) ⇒ Object



53
54
55
# File 'lib/testcentricity_web/page_sections_helper.rb', line 53

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

.label(element_name, locator) ⇒ Object



37
38
39
# File 'lib/testcentricity_web/page_sections_helper.rb', line 37

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


41
42
43
# File 'lib/testcentricity_web/page_sections_helper.rb', line 41

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

.section(section_name, class_name, locator = nil) ⇒ Object



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

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

.selectlist(element_name, locator) ⇒ Object



49
50
51
# File 'lib/testcentricity_web/page_sections_helper.rb', line 49

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

.table(element_name, locator) ⇒ Object



45
46
47
# File 'lib/testcentricity_web/page_sections_helper.rb', line 45

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

.textfield(element_name, locator) ⇒ Object



29
30
31
# File 'lib/testcentricity_web/page_sections_helper.rb', line 29

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

.trait(trait_name, &block) ⇒ Object



17
18
19
# File 'lib/testcentricity_web/page_sections_helper.rb', line 17

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

Instance Method Details

#exists?Boolean

Returns:

  • (Boolean)


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

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

#get_locatorObject



61
62
63
64
# File 'lib/testcentricity_web/page_sections_helper.rb', line 61

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

#hidden?Boolean

Returns:

  • (Boolean)


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

def hidden?
  not visible?
end

#set_parent(parent) ⇒ Object



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

def set_parent(parent)
  @parent = parent
end

#verify_ui_states(ui_states) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/testcentricity_web/page_sections_helper.rb', line 115

def verify_ui_states(ui_states)
  ui_states.each do | ui_object, object_states |
    object_states.each do | property, state |
      case property
        when :exists
          actual = ui_object.exists?
        when :enabled
          actual = ui_object.enabled?
        when :visible
          actual = ui_object.visible?
        when :readonly
          actual = ui_object.read_only?
        when :checked
          actual = ui_object.checked?
        when :value
          actual = ui_object.get_value
        when :maxlength
          actual = ui_object.get_max_length
        when :options
          actual = ui_object.get_options
        when :siebel_options
          actual = ui_object.get_siebel_options
        else
          if property.to_s.start_with? ('cell_')
            cell = property.to_s.gsub('cell_', '')
            cell = cell.split('_')
            actual = ui_object.get_table_cell(cell[0].to_i, cell[1].to_i)
          end
      end
      ExceptionQueue.enqueue_assert_equal(state, actual, "Expected #{ui_object.get_locator} #{property.to_s} property")
    end
  end
  ExceptionQueue.post_exceptions
end

#visible?Boolean

Returns:

  • (Boolean)


75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/testcentricity_web/page_sections_helper.rb', line 75

def visible?
  section, type = find_section
  exists = section
  invisible = false
  if type == :css
    Capybara.using_wait_time 0.1 do
      # is section itself hidden with .ui-helper-hidden class?
      self_hidden = page.has_css?("#{@locator}.ui-helper-hidden")
      # is parent of section hidden, thus hiding the section?
      parent_hidden = page.has_css?(".ui-helper-hidden > #{@locator}")
      # is grandparent of section, or any other ancestor, hidden?
      other_ancestor_hidden = page.has_css?(".ui-helper-hidden * #{@locator}")
      # if any of the above conditions are true, then section is invisible
      invisible = self_hidden || parent_hidden || other_ancestor_hidden
    end
  end
  # the section is visible if it exists and it is not invisible
  (exists && !invisible) ? true : false
end

#wait_until_exists(seconds) ⇒ Object



99
100
101
102
103
104
105
# File 'lib/testcentricity_web/page_sections_helper.rb', line 99

def wait_until_exists(seconds)
  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 #{get_locator} after #{timeout} seconds" unless exists?
end

#wait_until_gone(seconds) ⇒ Object



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

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