Class: Howitzer::Web::Page
- Inherits:
-
Object
- Object
- Howitzer::Web::Page
- Includes:
- CapybaraMethodsProxy, ElementDsl, IframeDsl, PageDsl, PageValidator, SectionDsl, RSpec::Matchers, RSpec::Wait, Singleton
- Defined in:
- lib/howitzer/web/page.rb
Overview
This class represents a single web page. This is a parent class for all web pages
Direct Known Subclasses
Constant Summary collapse
- UnknownPage =
:nodoc:
Class.new
Constants included from CapybaraMethodsProxy
CapybaraMethodsProxy::PROXIED_CAPYBARA_METHODS
Class Method Summary collapse
-
.current_page ⇒ String
Tries to identify current page name or raise the error if ambiguous page matching.
-
.current_url ⇒ String
Current page url from browser.
-
.displayed?(timeout = Howitzer.page_load_idle_timeout) ⇒ Boolean
Waits until a web page is opened.
-
.expanded_url(params = {}, url_processor = nil) ⇒ String
Returns an expanded page url for the page opening.
-
.given ⇒ Page
Returns a singleton instance of the web page.
-
.inherited(subclass) ⇒ Object
This Ruby callback makes all inherited classes as singleton classes.
-
.open(validate: true, url_processor: nil, **params) ⇒ Page
Opens a web page in browser.
-
.path(value) ⇒ Object
DSL to specify an relative path pattern for the page opening.
-
.site(value) ⇒ Object
DSL to specify a site for the page opening.
Instance Method Summary collapse
-
#initialize ⇒ Page
constructor
A new instance of Page.
-
#meta ⇒ Meta::Entry
Provides access to meta information about entities on the page.
-
#reload ⇒ Object
Reloads current page in a browser.
Methods included from PageValidator
#check_validations_are_defined!, included, validations
Methods included from SectionDsl
Methods included from CapybaraContextHolder
Methods included from PageDsl
Methods included from IframeDsl
Methods included from ElementDsl
Methods included from CapybaraMethodsProxy
Constructor Details
Class Method Details
.current_page ⇒ String
Tries to identify current page name or raise the error if ambiguous page matching
65 66 67 68 69 70 71 |
# File 'lib/howitzer/web/page.rb', line 65 def self.current_page page_list = matched_pages return UnknownPage if page_list.count.zero? return page_list.first if page_list.count == 1 raise Howitzer::AmbiguousPageMatchingError, ambiguous_page_msg(page_list) end |
.current_url ⇒ String
Returns current page url from browser.
90 91 92 |
# File 'lib/howitzer/web/page.rb', line 90 def self.current_url Capybara.current_session.current_url end |
.displayed?(timeout = Howitzer.page_load_idle_timeout) ⇒ Boolean
Waits until a web page is opened
78 79 80 81 82 83 84 85 86 |
# File 'lib/howitzer/web/page.rb', line 78 def self.displayed?(timeout = Howitzer.page_load_idle_timeout) end_time = ::Time.now + timeout until ::Time.now > end_time return true if opened? sleep(0.5) end raise Howitzer::IncorrectPageError, incorrect_page_msg end |
.expanded_url(params = {}, url_processor = nil) ⇒ String
Returns an expanded page url for the page opening
100 101 102 103 104 105 106 |
# File 'lib/howitzer/web/page.rb', line 100 def self.(params = {}, url_processor = nil) if defined?(path_value) return "#{site_value}#{Addressable::Template.new(path_value).(params, url_processor)}" end raise Howitzer::NoPathForPageError, "Please specify path for '#{self}' page. Example: path '/home'" end |
.given ⇒ Page
Returns a singleton instance of the web page
55 56 57 58 |
# File 'lib/howitzer/web/page.rb', line 55 def self.given displayed? instance end |
.inherited(subclass) ⇒ Object
This Ruby callback makes all inherited classes as singleton classes.
30 31 32 33 |
# File 'lib/howitzer/web/page.rb', line 30 def self.inherited(subclass) super subclass.class_eval { include Singleton } end |
.open(validate: true, url_processor: nil, **params) ⇒ Page
It tries to open the page twice and then raises the error if a validation is failed
Opens a web page in browser
42 43 44 45 46 47 48 49 50 |
# File 'lib/howitzer/web/page.rb', line 42 def self.open(validate: true, url_processor: nil, **params) url = (params, url_processor) Howitzer::Log.info "Open #{name} page by '#{url}' url" retryable(tries: 2, logger: Howitzer::Log, trace: true, on: Exception) do |retries| Howitzer::Log.info 'Retry...' unless retries.zero? Capybara.current_session.visit(url) end given if validate end |
.path(value) ⇒ Object
DSL to specify an relative path pattern for the page opening
127 128 129 130 |
# File 'lib/howitzer/web/page.rb', line 127 def path(value) define_singleton_method(:path_value) { value.to_s } private_class_method :path_value end |
.site(value) ⇒ Object
By default it specifies Howitzer.app_uri.site as a site
DSL to specify a site for the page opening
145 146 147 148 |
# File 'lib/howitzer/web/page.rb', line 145 def site(value) define_singleton_method(:site_value) { value } private_class_method :site_value end |
Instance Method Details
#meta ⇒ Meta::Entry
Provides access to meta information about entities on the page
110 111 112 |
# File 'lib/howitzer/web/page.rb', line 110 def @meta ||= Meta::Entry.new(self) end |