Class: TestCentricity::PageObject

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.button(element_name, locator) ⇒ Object

Define and instantiate a button UI Element for this page object.

Examples:

button :checkout_button, "button.checkout_button"
button :login_button,    "//input[@id='submit_button']"


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

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

.checkbox(element_name, locator) ⇒ Object

Define and instantiate a checkbox UI Element for this page object.

Examples:

checkbox :remember_checkbox,     "//input[@id='RememberUser']"
checkbox :accept_terms_checkbox, "accept_terms_conditions"


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

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

.element(element_name, locator) ⇒ Object



23
24
25
# File 'lib/testcentricity_web/page_objects_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}", :page, nil);end))
end

.image(element_name, locator) ⇒ Object



79
80
81
# File 'lib/testcentricity_web/page_objects_helper.rb', line 79

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

.label(element_name, locator) ⇒ Object



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

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


67
68
69
# File 'lib/testcentricity_web/page_objects_helper.rb', line 67

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

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



83
84
85
# File 'lib/testcentricity_web/page_objects_helper.rb', line 83

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}", :page);end))
end

.selectlist(element_name, locator) ⇒ Object



75
76
77
# File 'lib/testcentricity_web/page_objects_helper.rb', line 75

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

.table(element_name, locator) ⇒ Object



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

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

.textfield(element_name, locator) ⇒ Object

Define and instantiate a text field UI Element for this page object.

Examples:

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


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

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

.trait(trait_name, &block) ⇒ Object

Define a trait for this page object.

Examples:

trait(:page_name)     { 'Shopping Basket' }
trait(:page_url)      { "/shopping_basket" }
trait(:page_locator)  { "//body[@class='shopping_baskets']" }


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

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

Instance Method Details

#exists?Boolean



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/testcentricity_web/page_objects_helper.rb', line 131

def exists?
  saved_wait_time = Capybara.default_max_wait_time
  Capybara.default_max_wait_time = 0.1
  tries ||= 2
  attributes = [:id, :css, :xpath]
  type = attributes[tries]
  obj = page.find(type, page_locator)
  obj != nil
rescue
  Capybara.default_max_wait_time = saved_wait_time
  retry if (tries -= 1) > 0
  false
ensure
  Capybara.default_max_wait_time = saved_wait_time
end

#load_pageObject



112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/testcentricity_web/page_objects_helper.rb', line 112

def load_page
  return if exists?
  if defined?(page_url) && !page_url.nil?
    visit page_url
    begin
      page.driver.browser.switch_to.alert.accept
    rescue => e
    end unless Environ.browser == :safari || Environ.browser == :ie || Environ.is_device?
  else
    navigate_to
  end
  verify_page_exists
  PageManager.set_current_page(self)
end


108
# File 'lib/testcentricity_web/page_objects_helper.rb', line 108

def navigate_to; end

#open_portalObject



87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/testcentricity_web/page_objects_helper.rb', line 87

def open_portal
  environment = Environ.current
  (environment.hostname.length > 0) ?
      url = "#{environment.hostname}/#{environment.base_url}#{environment.append}" :
      url = "#{environment.base_url}#{environment.append}"
  if environment.user_id.length > 0 && environment.password.length > 0
    visit "#{environment.protocol}://#{environment.user_id}:#{environment.password}@#{url}"
  else
    visit "#{environment.protocol}://#{url}"
  end
  Environ.set_portal_state(:open)
end

#secure?Boolean



147
148
149
# File 'lib/testcentricity_web/page_objects_helper.rb', line 147

def secure?
  !current_url.match(/^https/).nil?
end

#verify_page_contains(content) ⇒ Object



127
128
129
# File 'lib/testcentricity_web/page_objects_helper.rb', line 127

def verify_page_contains(content)
  raise "Expected page to have content '#{content}'" unless page.has_content?(:visible, content)
end

#verify_page_existsObject



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

def verify_page_exists
  unless page.has_selector?(page_locator)
    body_class = find(:xpath, '//body')[:class]
    error_message = "Expected page to have selector '#{page_locator}' but found '#{body_class}' instead.\nURL of page loaded = #{URI.parse(current_url)}"
    raise error_message
  end
end

#verify_page_uiObject



110
# File 'lib/testcentricity_web/page_objects_helper.rb', line 110

def verify_page_ui; end

#verify_ui_states(ui_states) ⇒ Object



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/testcentricity_web/page_objects_helper.rb', line 151

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