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.



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

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

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



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

def context
  @context
end

#locatorObject (readonly)

Returns the value of attribute locator.



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

def locator
  @locator
end

#parentObject

Returns the value of attribute parent.



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

def parent
  @parent
end

Class Method Details

.button(element_name, locator) ⇒ Object



27
28
29
# File 'lib/testcentricity_web/page_sections_helper.rb', line 27

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



35
36
37
# File 'lib/testcentricity_web/page_sections_helper.rb', line 35

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



23
24
25
# File 'lib/testcentricity_web/page_sections_helper.rb', line 23

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



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

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



39
40
41
# File 'lib/testcentricity_web/page_sections_helper.rb', line 39

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


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

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



59
60
61
# File 'lib/testcentricity_web/page_sections_helper.rb', line 59

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



51
52
53
# File 'lib/testcentricity_web/page_sections_helper.rb', line 51

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



47
48
49
# File 'lib/testcentricity_web/page_sections_helper.rb', line 47

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



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

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



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

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

Instance Method Details

#exists?Boolean

Returns:

  • (Boolean)


72
73
74
75
# File 'lib/testcentricity_web/page_sections_helper.rb', line 72

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

#get_locatorObject



63
64
65
66
# File 'lib/testcentricity_web/page_sections_helper.rb', line 63

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)


97
98
99
# File 'lib/testcentricity_web/page_sections_helper.rb', line 97

def hidden?
  not visible?
end

#set_parent(parent) ⇒ Object



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

def set_parent(parent)
  @parent = parent
end

#verify_ui_states(ui_states) ⇒ Object



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

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)


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

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



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

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



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

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