Class: SitePrism::Page
- Inherits:
-
Object
- Object
- SitePrism::Page
- Includes:
- Capybara::DSL, DSL, ElementChecker, Loadable
- Defined in:
- lib/site_prism/page.rb
Overview
- SitePrism::Page
-
SitePrism Pages are the top level construct of the POM framework
Instances of this class represent a full web page that can either be dynamically navigated to through clicking buttons or filling in fields, or verbosely loaded by using the ‘#load` method
All method calls made whilst on a page are scoped using ‘#to_capybara_node` which defaults to the current Capybara session or the `@page` that has been loaded in-line
Class Attribute Summary collapse
-
.url ⇒ Object
readonly
Returns the value of attribute url.
Attributes included from Loadable
Class Method Summary collapse
-
.set_url(page_url) ⇒ String
Sets and returns the specific url that will be loaded for a page object.
-
.set_url_matcher(page_url_matcher) ⇒ Regexp
Sets and returns the specific url matcher that will be used to validate the page is loaded.
-
.url_matcher ⇒ Regexp || String
The specific url matcher that is used to validate the page is loaded.
Instance Method Summary collapse
-
#displayed?(*args) ⇒ Boolean
Returns true if the page is displayed within the requisite time Returns false if the page is not displayed within the requisite time.
-
#load(expansion_or_html = {}, &block) ⇒ Object
Loads the page.
-
#secure? ⇒ Boolean
Returns true if the page is secure, otherwise returns false.
-
#to_capybara_node ⇒ Capybara::Node::Simple || Capybara::Session
This scopes our calls inside Page correctly to the ‘Capybara::Session`.
-
#url(expansion = {}) ⇒ NilClass || String
Returns the templated url from the set_url property defined during the page definition Returns ‘nil` if there was not a property set (i.e. the page should not be directly loaded).
-
#url_matcher ⇒ Regexp
Returns the url_matcher property defined during the page definition.
-
#url_matches(seconds = Capybara.default_max_wait_time) ⇒ Nil || MatchData || Hash
Return the matching information of a page.
-
#wait_until_displayed(*args) ⇒ Boolean
Wait until the page is displayed according to input arguments If no url_matcher is provided we don’t know how to determine if the page is displayed.
Methods included from DSL
Methods included from Loadable
included, #loaded?, #when_loaded
Methods included from ElementChecker
#all_there?, #elements_missing, #elements_present
Class Attribute Details
.url ⇒ Object (readonly)
Returns the value of attribute url.
20 21 22 |
# File 'lib/site_prism/page.rb', line 20 def url @url end |
Class Method Details
.set_url(page_url) ⇒ String
Sets and returns the specific url that will be loaded for a page object
25 26 27 |
# File 'lib/site_prism/page.rb', line 25 def set_url(page_url) @url = page_url.to_s end |
.set_url_matcher(page_url_matcher) ⇒ Regexp
Sets and returns the specific url matcher that will be used to validate the page is loaded
32 33 34 |
# File 'lib/site_prism/page.rb', line 32 def set_url_matcher(page_url_matcher) @url_matcher = page_url_matcher end |
.url_matcher ⇒ Regexp || String
The specific url matcher that is used to validate the page is loaded. When one hasn’t been previously set, use the url that was set as a direct Regexp exact matcher
40 41 42 |
# File 'lib/site_prism/page.rb', line 40 def url_matcher @url_matcher ||= url end |
Instance Method Details
#displayed?(*args) ⇒ Boolean
Returns true if the page is displayed within the requisite time Returns false if the page is not displayed within the requisite time
85 86 87 88 89 |
# File 'lib/site_prism/page.rb', line 85 def displayed?(*args) wait_until_displayed(*args) rescue SitePrism::TimeoutError false end |
#load(expansion_or_html = {}, &block) ⇒ Object
Loads the page. The page will yield the block if defined.
Executes the block, if given. Runs load validations on the page, unless input is a string
When calling #load, all the validations that are set will be ran in order
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/site_prism/page.rb', line 61 def load(expansion_or_html = {}, &block) self.loaded = false SitePrism.logger.debug("Reset loaded state on #{self.class}.") return_yield = if expansion_or_html.is_a?(String) load_html_string(expansion_or_html, &block) else load_html_website(expansion_or_html, &block) end # Ensure that we represent that the page we loaded is now indeed loaded! # This ensures that future calls to #loaded? do not perform the # instance evaluations against all load validations procs another time. self.loaded = true SitePrism.logger.info("#{self.class} loaded.") # Return the yield from the block if there was one, otherwise return true return_yield || true end |
#secure? ⇒ Boolean
Returns true if the page is secure, otherwise returns false
136 137 138 |
# File 'lib/site_prism/page.rb', line 136 def secure? page.current_url.start_with?('https') end |
#to_capybara_node ⇒ Capybara::Node::Simple || Capybara::Session
This scopes our calls inside Page correctly to the ‘Capybara::Session`
48 49 50 |
# File 'lib/site_prism/page.rb', line 48 def (defined?(@page) && @page) || Capybara.current_session end |
#url(expansion = {}) ⇒ NilClass || String
Returns the templated url from the set_url property defined during the page definition Returns ‘nil` if there was not a property set (i.e. the page should not be directly loaded)
122 123 124 |
# File 'lib/site_prism/page.rb', line 122 def url(expansion = {}) self.class.url && Addressable::Template.new(self.class.url).(expansion).to_s end |
#url_matcher ⇒ Regexp
Returns the url_matcher property defined during the page definition
129 130 131 |
# File 'lib/site_prism/page.rb', line 129 def url_matcher self.class.url_matcher end |
#url_matches(seconds = Capybara.default_max_wait_time) ⇒ Nil || MatchData || Hash
Return the matching information of a page
Return nil if the page is not displayed correctly Return the regex matches if we have provided a regexp style url_matcher Otherwise fall back to an addressable-style template of matches
111 112 113 114 115 116 |
# File 'lib/site_prism/page.rb', line 111 def url_matches(seconds = Capybara.default_max_wait_time) return unless displayed?(seconds) return regexp_backed_matches if url_matcher.is_a?(Regexp) template_backed_matches end |
#wait_until_displayed(*args) ⇒ Boolean
Wait until the page is displayed according to input arguments If no url_matcher is provided we don’t know how to determine if the page is displayed. So we return an error Then we wait until the url matches the expected mappings
96 97 98 99 100 101 102 |
# File 'lib/site_prism/page.rb', line 96 def wait_until_displayed(*args) raise SitePrism::NoUrlMatcherForPageError unless url_matcher expected_mappings = args.last.is_a?(::Hash) ? args.pop : {} seconds = args&.first || Capybara.default_max_wait_time Waiter.wait_until_true(seconds) { url_matches?(expected_mappings) } end |