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
permalink #initialize ⇒ Page
Returns a new instance of Page.
165 166 167 168 169 |
# File 'lib/howitzer/web/page.rb', line 165 def initialize check_validations_are_defined! current_window.maximize if Howitzer.maximized_window && !%w[chrome headless_chrome].include?(Capybara.current_driver) end |
Class Method Details
permalink .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 |
permalink .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 |
permalink .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 |
permalink .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 |
permalink .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 |
permalink .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 |
permalink .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 |
permalink .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 |
permalink .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
permalink #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 |
permalink #reload ⇒ Object
Reloads current page in a browser
173 174 175 176 |
# File 'lib/howitzer/web/page.rb', line 173 def reload Howitzer::Log.info "Reload '#{current_url}'" visit current_url end |