Class: OLE_QA::Framework::Page

Inherits:
Common_Object show all
Includes:
Page_Helpers
Defined in:
lib/common/page.rb

Overview

An OLE Page object

Instance Attribute Summary collapse

Attributes inherited from Common_Object

#elements, #functions, #ole

Instance Method Summary collapse

Methods included from Page_Helpers

#set_line

Methods included from Helpers

#browser, #load_yml, #set_element, #set_function

Constructor Details

#initialize(ole_session, url, lookup_url = nil) ⇒ Page

Returns a new instance of Page.

Parameters:

  • ole_session (Object)

    The OLE_QA::Framework::Session instance in which the page should load.

  • url (String)

    The URL (if any) used to open the page. (Set to “” if unused.)

  • lookup_url (String) (defaults to: nil)

    The URL (if any) by which a document represented by the page can be opened.

    • The string must contain the replacement token ‘DOC_ID’ where a document ID is to be inserted.



38
39
40
41
42
43
44
45
46
# File 'lib/common/page.rb', line 38

def initialize(ole_session, url, lookup_url = nil)
  super(ole_session)
  @url = url
  @lookup_url = lookup_url
  @wait_on = Array.new
  @lines = Array.new
  wait_for_elements if defined?(self.wait_for_elements)
  set_lines if defined?(self.set_lines)
end

Instance Attribute Details

#linesObject (readonly)

An array containing the name (Symbol) of each line object on the page object.



27
28
29
# File 'lib/common/page.rb', line 27

def lines
  @lines
end

#urlObject (readonly)

Note:

Do not use this value for the URL to open a new page of a given document type. If the page object represents an e-Document in OLEFS or OLELS, instead use the :new_url accessor set on the e-Doc object.

The URL to open a given page.



24
25
26
# File 'lib/common/page.rb', line 24

def url
  @url
end

#wait_onObject (readonly)

An array containing the elements (Symbol) to wait on before the page is considered loaded.



30
31
32
# File 'lib/common/page.rb', line 30

def wait_on
  @wait_on
end

Instance Method Details

#lookup(doc_id) ⇒ Object

Open the page by lookup URL and return true if successful, false if not.



65
66
67
68
69
70
71
72
# File 'lib/common/page.rb', line 65

def lookup(doc_id)
  if !@lookup_url.nil?
    @browser.goto(lookup_url(doc_id))
    true
  else
    false
  end
end

#lookup_url(doc_id) ⇒ Object

Return the URL used to open a specific document by given document number.



60
61
62
# File 'lib/common/page.rb', line 60

def lookup_url(doc_id)
  @lookup_url.nil? ? nil : (@ole.url + @lookup_url.gsub('_DOC_ID_', doc_id.to_s))
end

#open(url = @url) ⇒ Object

Note:

Some pages may not have custom open URLs. If this is the case, this method can be passed a lookup URL with a document ID #.

Note:

This method will invoke the wait_for_elements method if it is defined on a page.

Note:

If a page has declared elements to wait on, invoking this method will return an array of the symbols used to call those methods.

Open the page via URL.



54
55
56
57
# File 'lib/common/page.rb', line 54

def open(url = @url)
  @browser.goto(url)
  wait_for_page_to_load
end

#set_elementsObject

Set screen elements common to most or all pages across the OLE interface.



103
104
105
106
107
108
109
110
111
112
# File 'lib/common/page.rb', line 103

def set_elements
  # These elements exist outside of any frame, so @browser is used to force
  #   Watir-Webdriver to give access to a bare browser even on a page with a frame.
  #   See {OLE_QA::Framework::Helpers#browser} for frame handling.
  element(:login_field)           {@browser.text_field(:name => 'backdoorId')}
  element(:login_button)          {@browser.input(:class => 'go', :value => 'Login')}
  element(:logout_button)         {@browser.input(:class => 'go', :value => 'Logout')}
  element(:login_confirmation)    {@browser.div(:id => 'login-info').strong(:text => /Impersonating User\:/)}
  element(:loading_message)       {@browser.img(:alt => 'Loading...')}
end

#set_functionsObject

Set functions common to most or all pages across the OLE interface.



115
116
117
118
119
120
121
122
123
# File 'lib/common/page.rb', line 115

def set_functions
  # Login as a given user.
  # @param username [String] The username to use.
  # @return [Boolean] Whether the login process succeeded.
  function(:login)                {|as_who = 'ole-khuntley'| raise OLE_QA::Framework::Error,"Login field not present on this page: #{self.class.name}" unless .present? ; .set(as_who) ; .click ; if .present? then .text.match(/#{as_who}/) ? true : false else false end}
  # Logout from previous login.
  # @return [Boolean] Whether the logout process succeeded.
  function(:logout)               { logout_button.click ; .present? ? false : true}
end

#wait_for_element(element) ⇒ Object

Use this method on subclasses to define elements that must be loaded for the page to be considered completely loaded. This method can be called individually or will be called on an open command if .wait_for_elements is defined on the subclass.



88
89
90
# File 'lib/common/page.rb', line 88

def wait_for_element(element)
  self.send(element).wait_until_present(@ole.explicit_wait)
end

#wait_for_elementsObject

Define this method on a subclass. Add element symbols to the @wait_on array. This will require the open method to wait for each of these elements to be present before it finishes.

e.g.
def wait_for_elements
  @wait_on << :title
  @wait_on << :close_button
  super
end


83
84
# File 'lib/common/page.rb', line 83

def wait_for_elements
end

#wait_for_page_to_loadObject

Call this method on a page that has wait_for_elements defined to wait for all required elements on that page to load.



94
95
96
97
98
99
100
# File 'lib/common/page.rb', line 94

def wait_for_page_to_load
  @wait_on.each { |element| wait_for_element(element) }
  loading_message.wait_while_present if loading_message.present?
  true
rescue Watir::Wait::TimeoutError
  false
end