site_prism 4.0.beta → 4.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +75 -97
- data/lib/site_prism/addressable_url_matcher.rb +37 -42
- data/lib/site_prism/deprecator.rb +3 -3
- data/lib/site_prism/dsl.rb +27 -34
- data/lib/site_prism/element_checker.rb +12 -14
- data/lib/site_prism/loadable.rb +4 -5
- data/lib/site_prism/page.rb +34 -3
- data/lib/site_prism/rspec_matchers.rb +6 -3
- data/lib/site_prism/section.rb +0 -7
- data/lib/site_prism/timer.rb +4 -17
- data/lib/site_prism/version.rb +1 -1
- data/lib/site_prism/waiter.rb +2 -2
- data/lib/site_prism.rb +15 -15
- metadata +29 -41
@@ -15,7 +15,7 @@ module SitePrism
|
|
15
15
|
warn("#{old} is being deprecated and should no longer be used.")
|
16
16
|
end
|
17
17
|
|
18
|
-
warn("#{old} will be removed in SitePrism
|
18
|
+
warn("#{old} will be removed in SitePrism v5. You have been warned!")
|
19
19
|
end
|
20
20
|
|
21
21
|
# @return SitePrism.logger.debug(msg)
|
@@ -27,9 +27,9 @@ module SitePrism
|
|
27
27
|
# NB: As this is bubbled up at debug level, often users will not see this. So it will
|
28
28
|
# never be a candidate for removal directly
|
29
29
|
def soft_deprecate(old, reason, new = nil)
|
30
|
-
debug("The #{old} method is changing, as is SitePrism, and is now
|
30
|
+
debug("The #{old} method is changing, as is SitePrism, and is now advised to be changed.")
|
31
31
|
debug("REASON: #{reason}.")
|
32
|
-
debug('Moving forwards into SitePrism
|
32
|
+
debug('Moving forwards into SitePrism v5, the default behaviour will change.')
|
33
33
|
debug("We advise you change to using #{new}") if new
|
34
34
|
end
|
35
35
|
|
data/lib/site_prism/dsl.rb
CHANGED
@@ -16,7 +16,7 @@ module SitePrism
|
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
def
|
19
|
+
def raise_if_runtime_block_supplied(object, name, has_block, type)
|
20
20
|
return unless has_block
|
21
21
|
|
22
22
|
SitePrism.logger.debug("Type passed in: #{type}")
|
@@ -24,25 +24,21 @@ module SitePrism
|
|
24
24
|
raise SitePrism::UnsupportedBlockError
|
25
25
|
end
|
26
26
|
|
27
|
-
# Call `find` inside `to_capybara_node` context (Either Capybara::Session or Capybara::Node::Element)
|
28
27
|
def _find(*find_args)
|
29
28
|
kwargs = find_args.pop
|
30
29
|
to_capybara_node.find(*find_args, **kwargs)
|
31
30
|
end
|
32
31
|
|
33
|
-
# Call `all` inside `to_capybara_node` context (Either Capybara::Session or Capybara::Node::Element)
|
34
32
|
def _all(*find_args)
|
35
33
|
kwargs = find_args.pop
|
36
34
|
to_capybara_node.all(*find_args, **kwargs)
|
37
35
|
end
|
38
36
|
|
39
|
-
# Call `has_selector?` inside `to_capybara_node` context (Either Capybara::Session or Capybara::Node::Element)
|
40
37
|
def element_exists?(*find_args)
|
41
38
|
kwargs = find_args.pop
|
42
39
|
to_capybara_node.has_selector?(*find_args, **kwargs)
|
43
40
|
end
|
44
41
|
|
45
|
-
# Call `has_no_selector?` inside `to_capybara_node` context (Either Capybara::Session or Capybara::Node::Element)
|
46
42
|
def element_does_not_exist?(*find_args)
|
47
43
|
kwargs = find_args.pop
|
48
44
|
to_capybara_node.has_no_selector?(*find_args, **kwargs)
|
@@ -103,10 +99,10 @@ module SitePrism
|
|
103
99
|
# Wait for the elements to be present or not -> @return [TrueClass, SitePrism::Error]
|
104
100
|
# Validate certain properties about the element
|
105
101
|
def element(name, *find_args)
|
106
|
-
|
102
|
+
raise_if_build_time_block_supplied(self, name, block_given?, :element)
|
107
103
|
build(:element, name, *find_args) do
|
108
104
|
define_method(name) do |*runtime_args, &runtime_block|
|
109
|
-
|
105
|
+
raise_if_runtime_block_supplied(self, name, runtime_block, :element)
|
110
106
|
_find(*merge_args(find_args, runtime_args))
|
111
107
|
end
|
112
108
|
end
|
@@ -118,10 +114,10 @@ module SitePrism
|
|
118
114
|
# Wait for the elements to be present or not -> @return [TrueClass, SitePrism::Error]
|
119
115
|
# Validate certain properties about the elements
|
120
116
|
def elements(name, *find_args)
|
121
|
-
|
117
|
+
raise_if_build_time_block_supplied(self, name, block_given?, :elements)
|
122
118
|
build(:elements, name, *find_args) do
|
123
119
|
define_method(name) do |*runtime_args, &runtime_block|
|
124
|
-
|
120
|
+
raise_if_runtime_block_supplied(self, name, runtime_block, :elements)
|
125
121
|
_all(*merge_args(find_args, runtime_args))
|
126
122
|
end
|
127
123
|
end
|
@@ -151,7 +147,7 @@ module SitePrism
|
|
151
147
|
section_class, find_args = extract_section_options(args, &block)
|
152
148
|
build(:sections, name, *find_args) do
|
153
149
|
define_method(name) do |*runtime_args, &runtime_block|
|
154
|
-
|
150
|
+
raise_if_runtime_block_supplied(self, name, runtime_block, :sections)
|
155
151
|
_all(*merge_args(find_args, runtime_args)).map do |element|
|
156
152
|
section_class.new(self, element)
|
157
153
|
end
|
@@ -160,7 +156,7 @@ module SitePrism
|
|
160
156
|
end
|
161
157
|
|
162
158
|
def iframe(name, klass, *args)
|
163
|
-
|
159
|
+
raise_if_build_time_block_supplied(self, name, block_given?, :elements)
|
164
160
|
element_find_args = deduce_iframe_element_find_args(args)
|
165
161
|
scope_find_args = deduce_iframe_scope_find_args(args)
|
166
162
|
build(:iframe, name, *element_find_args) do
|
@@ -175,10 +171,10 @@ module SitePrism
|
|
175
171
|
# Return a list of all mapped items on a SitePrism class instance (Page or Section)
|
176
172
|
# If legacy is set to true (Default) -> @return [Array]
|
177
173
|
# If legacy is set to false (New behaviour) -> @return [Hash]
|
178
|
-
def mapped_items(legacy:
|
179
|
-
return
|
174
|
+
def mapped_items(legacy: false)
|
175
|
+
return legacy_mapped_items if legacy
|
180
176
|
|
181
|
-
|
177
|
+
@mapped_items ||= { element: [], elements: [], section: [], sections: [], iframe: [] }
|
182
178
|
end
|
183
179
|
|
184
180
|
private
|
@@ -192,13 +188,13 @@ module SitePrism
|
|
192
188
|
map_item(type, name)
|
193
189
|
yield
|
194
190
|
end
|
195
|
-
add_helper_methods(name, *find_args)
|
191
|
+
add_helper_methods(name, type, *find_args)
|
196
192
|
end
|
197
193
|
|
198
|
-
def add_helper_methods(name, *find_args)
|
194
|
+
def add_helper_methods(name, _type, *find_args)
|
199
195
|
create_existence_checker(name, *find_args)
|
200
196
|
create_nonexistence_checker(name, *find_args)
|
201
|
-
SitePrism::
|
197
|
+
SitePrism::RSpecMatchers.new(name)._create_rspec_existence_matchers if defined?(RSpec)
|
202
198
|
create_visibility_waiter(name, *find_args)
|
203
199
|
create_invisibility_waiter(name, *find_args)
|
204
200
|
end
|
@@ -254,15 +250,15 @@ module SitePrism
|
|
254
250
|
end
|
255
251
|
|
256
252
|
def create_error_method(name)
|
257
|
-
SitePrism.
|
258
|
-
SitePrism::Deprecator.soft_deprecate(
|
253
|
+
SitePrism::Deprecator.deprecate(
|
259
254
|
'DSL definition with no find_args',
|
260
|
-
'
|
255
|
+
'DSL definition with at least 1 find_arg'
|
261
256
|
)
|
257
|
+
SitePrism.logger.error("#{name} has come from an item with no locators.")
|
262
258
|
define_method(name) { raise SitePrism::InvalidElementError }
|
263
259
|
end
|
264
260
|
|
265
|
-
def
|
261
|
+
def raise_if_build_time_block_supplied(parent_object, name, has_block, type)
|
266
262
|
return unless has_block
|
267
263
|
|
268
264
|
SitePrism.logger.debug("Type passed in: #{type}")
|
@@ -270,22 +266,19 @@ module SitePrism
|
|
270
266
|
raise SitePrism::UnsupportedBlockError
|
271
267
|
end
|
272
268
|
|
273
|
-
def
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
def new_mapped_items
|
283
|
-
@new_mapped_items ||= { element: [], elements: [], section: [], sections: [], iframe: [] }
|
269
|
+
def legacy_mapped_items
|
270
|
+
@legacy_mapped_items ||= begin
|
271
|
+
SitePrism::Deprecator.deprecate(
|
272
|
+
'.mapped_items structure (internally), on a class',
|
273
|
+
'the new .mapped_items structure'
|
274
|
+
)
|
275
|
+
[]
|
276
|
+
end
|
284
277
|
end
|
285
278
|
|
286
279
|
def map_item(type, name)
|
287
|
-
|
288
|
-
|
280
|
+
mapped_items(legacy: true) << { type => name }
|
281
|
+
mapped_items[type] << name.to_sym
|
289
282
|
end
|
290
283
|
|
291
284
|
def deduce_iframe_scope_find_args(args)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module SitePrism
|
4
|
+
#
|
4
5
|
# [SitePrism::ElementChecker]
|
5
6
|
#
|
6
7
|
# This allows users to run `#all_there?` checks on an instance.
|
7
8
|
#
|
8
|
-
# NB: This functionality is being removed in v4 in favour of the all_there gem
|
9
9
|
module ElementChecker
|
10
10
|
# Runnable in the scope of any SitePrism::Page or Section.
|
11
11
|
# Returns +true+ when "every item" that is being checked is
|
@@ -13,10 +13,16 @@ module SitePrism
|
|
13
13
|
# for how the definition of "every item" is derived.
|
14
14
|
#
|
15
15
|
# Example
|
16
|
-
# @my_page.mapped_items
|
17
|
-
#
|
16
|
+
# @my_page.class.mapped_items
|
17
|
+
# {
|
18
|
+
# element => [:button_one, :button_two],
|
19
|
+
# elements => [:button_collection_one, :button_collection_two],
|
20
|
+
# section => [:filters],
|
21
|
+
# sections => [:search_result],
|
22
|
+
# iframe => []
|
23
|
+
# }
|
18
24
|
# @my_page.all_there?
|
19
|
-
# => true - If the
|
25
|
+
# => true - If the items above are all present
|
20
26
|
#
|
21
27
|
# Note that #elements_to_check will check the hash of mapped_items
|
22
28
|
#
|
@@ -26,13 +32,7 @@ module SitePrism
|
|
26
32
|
# Override: 'one' => Perform one recursive dive into all section/sections
|
27
33
|
# items and call #all_there? on all of those items too.
|
28
34
|
def all_there?(recursion: :none)
|
29
|
-
|
30
|
-
when :none; then elements_to_check.all? { |name| there?(name) }
|
31
|
-
when :one; then SitePrism::AllThere::RecursionChecker.new(self).all_there?
|
32
|
-
else
|
33
|
-
SitePrism.logger.debug("Input value '#{recursion}'. Valid values are :none or :one.")
|
34
|
-
SitePrism.logger.error('Invalid recursion setting, Will not run #all_there?.')
|
35
|
-
end
|
35
|
+
SitePrism::AllThere::RecursionChecker.new(self).all_there?(recursion: recursion)
|
36
36
|
end
|
37
37
|
|
38
38
|
# Returns each element that is currently present inside the scope being tested
|
@@ -51,8 +51,6 @@ module SitePrism
|
|
51
51
|
|
52
52
|
private
|
53
53
|
|
54
|
-
# If the page or section has expected_items set, return expected_items that are mapped
|
55
|
-
# otherwise just return the list of all mapped_items
|
56
54
|
def elements_to_check
|
57
55
|
if _expected_items
|
58
56
|
SitePrism.logger.debug('Expected Items has been set.')
|
@@ -63,7 +61,7 @@ module SitePrism
|
|
63
61
|
end
|
64
62
|
|
65
63
|
def _mapped_items
|
66
|
-
self.class.mapped_items
|
64
|
+
self.class.mapped_items.values.flatten.uniq
|
67
65
|
end
|
68
66
|
|
69
67
|
def _expected_items
|
data/lib/site_prism/loadable.rb
CHANGED
@@ -43,10 +43,11 @@ module SitePrism
|
|
43
43
|
|
44
44
|
# Check if the page is loaded.
|
45
45
|
#
|
46
|
-
# On failure, if an error was reported by a failing validation,
|
47
|
-
# it will be available via the `load_error` accessor.
|
46
|
+
# On failure, if an error was reported by a failing validation, it will be available via the `load_error` accessor
|
48
47
|
#
|
49
|
-
#
|
48
|
+
# It will return true if the page has been loaded successfully; otherwise it returns false
|
49
|
+
#
|
50
|
+
# @return [Boolean]
|
50
51
|
def loaded?
|
51
52
|
self.load_error = nil
|
52
53
|
|
@@ -57,8 +58,6 @@ module SitePrism
|
|
57
58
|
|
58
59
|
private
|
59
60
|
|
60
|
-
# If any load validations from page subclasses returns false,
|
61
|
-
# immediately return false.
|
62
61
|
def load_validations_pass?
|
63
62
|
self.class.load_validations.all? do |validation|
|
64
63
|
passed, message = instance_eval(&validation)
|
data/lib/site_prism/page.rb
CHANGED
@@ -9,7 +9,7 @@ module SitePrism
|
|
9
9
|
# through clicking buttons or filling in fields, or verbosely loaded by using the `#load` method
|
10
10
|
#
|
11
11
|
# All method calls made whilst on a page are scoped using `#to_capybara_node` which defaults to the
|
12
|
-
# current Capybara session
|
12
|
+
# current Capybara session or the `@page` that has been loaded in-line
|
13
13
|
class Page
|
14
14
|
include Capybara::DSL
|
15
15
|
include ElementChecker
|
@@ -48,12 +48,17 @@ module SitePrism
|
|
48
48
|
#
|
49
49
|
# @return [Capybara::Node::Simple || Capybara::Session]
|
50
50
|
def page
|
51
|
-
|
51
|
+
@_page ||= begin
|
52
|
+
SitePrism::Deprecator.deprecate('Calling #page on a SitePrism::Page instance')
|
53
|
+
to_capybara_node
|
54
|
+
end
|
52
55
|
end
|
53
56
|
|
54
57
|
# This scopes our calls inside Page correctly to the `Capybara::Session`
|
58
|
+
#
|
59
|
+
# @return [Capybara::Node::Simple || Capybara::Session]
|
55
60
|
def to_capybara_node
|
56
|
-
page
|
61
|
+
(defined?(@page) && @page) || Capybara.current_session
|
57
62
|
end
|
58
63
|
|
59
64
|
# Loads the page.
|
@@ -85,12 +90,21 @@ module SitePrism
|
|
85
90
|
return_yield || true
|
86
91
|
end
|
87
92
|
|
93
|
+
# Returns true if the page is displayed within the requisite time
|
94
|
+
# Returns false if the page is not displayed within the requisite time
|
95
|
+
#
|
96
|
+
# @return [Boolean]
|
88
97
|
def displayed?(*args)
|
89
98
|
wait_until_displayed(*args)
|
90
99
|
rescue SitePrism::TimeoutError
|
91
100
|
false
|
92
101
|
end
|
93
102
|
|
103
|
+
# Wait until the page is displayed according to input arguments
|
104
|
+
# If no url_matcher is provided we don't know how to determine if the page is displayed. So we return an error
|
105
|
+
# Then we wait until the url matches the expected mappings
|
106
|
+
#
|
107
|
+
# @return [Boolean]
|
94
108
|
def wait_until_displayed(*args)
|
95
109
|
raise SitePrism::NoUrlMatcherForPageError unless url_matcher
|
96
110
|
|
@@ -99,6 +113,13 @@ module SitePrism
|
|
99
113
|
Waiter.wait_until_true(seconds) { url_matches?(expected_mappings) }
|
100
114
|
end
|
101
115
|
|
116
|
+
# Return the matching information of a page
|
117
|
+
#
|
118
|
+
# Return nil if the page is not displayed correctly
|
119
|
+
# Return the regex matches if we have provided a regexp style url_matcher
|
120
|
+
# Otherwise fall back to an addressable-style template of matches
|
121
|
+
#
|
122
|
+
# @return [Nil || MatchData || Hash]
|
102
123
|
def url_matches(seconds = Capybara.default_max_wait_time)
|
103
124
|
return unless displayed?(seconds)
|
104
125
|
return regexp_backed_matches if url_matcher.is_a?(Regexp)
|
@@ -106,14 +127,24 @@ module SitePrism
|
|
106
127
|
template_backed_matches
|
107
128
|
end
|
108
129
|
|
130
|
+
# Returns the templated url from the set_url property defined during the page definition
|
131
|
+
# Returns `nil` if there was not a property set (i.e. the page should not be directly loaded)
|
132
|
+
#
|
133
|
+
# @return [NilClass || String]
|
109
134
|
def url(expansion = {})
|
110
135
|
self.class.url && Addressable::Template.new(self.class.url).expand(expansion).to_s
|
111
136
|
end
|
112
137
|
|
138
|
+
# Returns the url_matcher property defined during the page definition
|
139
|
+
#
|
140
|
+
# @return [Regexp]
|
113
141
|
def url_matcher
|
114
142
|
self.class.url_matcher
|
115
143
|
end
|
116
144
|
|
145
|
+
# Returns true if the page is secure, otherwise returns false
|
146
|
+
#
|
147
|
+
# @return [Boolean]
|
117
148
|
def secure?
|
118
149
|
page.current_url.start_with?('https')
|
119
150
|
end
|
@@ -4,13 +4,16 @@ module SitePrism
|
|
4
4
|
#
|
5
5
|
# @api private
|
6
6
|
#
|
7
|
-
class
|
7
|
+
class RSpecMatchers
|
8
8
|
attr_reader :element_name
|
9
9
|
|
10
10
|
def initialize(element_name)
|
11
11
|
@element_name = element_name
|
12
12
|
end
|
13
13
|
|
14
|
+
# Create the positive and negative rspec matchers that will use the SitePrism boolean methods
|
15
|
+
#
|
16
|
+
# @return [Symbol]
|
14
17
|
def _create_rspec_existence_matchers
|
15
18
|
SitePrism.logger.debug('Including all relevant matcher names / warnings in RSpec scope.')
|
16
19
|
create_rspec_existence_matchers(matcher, object_method, negated_object_method, warning)
|
@@ -43,8 +46,8 @@ module SitePrism
|
|
43
46
|
end
|
44
47
|
|
45
48
|
def warning
|
46
|
-
"The RSpec matcher '#{matcher}' was added by SitePrism, but the object under test "\
|
47
|
-
"does not respond to '#{negated_object_method}' and is probably not a SitePrism object. "\
|
49
|
+
"The RSpec matcher '#{matcher}' was added by SitePrism, but the object under test " \
|
50
|
+
"does not respond to '#{negated_object_method}' and is probably not a SitePrism object. " \
|
48
51
|
'Falling back to the default RSpec matcher.'
|
49
52
|
end
|
50
53
|
end
|
data/lib/site_prism/section.rb
CHANGED
@@ -72,13 +72,6 @@ module SitePrism
|
|
72
72
|
Capybara.within(root_element) { yield(self) }
|
73
73
|
end
|
74
74
|
|
75
|
-
# This was the old API-style of delegating through the Capybara.page call and over-loading
|
76
|
-
# the method so we always went through our correct `root_element`
|
77
|
-
def page
|
78
|
-
SitePrism.logger.fatal('This is not supposed to be used. All delegation now happens automatically!')
|
79
|
-
raise SitePrism::SitePrismError
|
80
|
-
end
|
81
|
-
|
82
75
|
def capybara_session
|
83
76
|
Capybara.current_session
|
84
77
|
end
|
data/lib/site_prism/timer.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module SitePrism
|
4
|
-
# [SitePrism::Timer]
|
5
4
|
#
|
6
|
-
#
|
5
|
+
# @api private
|
6
|
+
#
|
7
7
|
class Timer
|
8
8
|
attr_reader :wait_time
|
9
9
|
|
10
|
-
# Return &block
|
11
|
-
#
|
12
|
-
# Count towards a specified time (Supplied)
|
13
10
|
def self.run(wait_time, &block)
|
14
11
|
new(wait_time).run(&block)
|
15
12
|
end
|
@@ -19,16 +16,10 @@ module SitePrism
|
|
19
16
|
@done = false
|
20
17
|
end
|
21
18
|
|
22
|
-
# Return Boolean
|
23
|
-
#
|
24
|
-
# Whether the timer has completed
|
25
19
|
def done?
|
26
20
|
@done == true
|
27
21
|
end
|
28
22
|
|
29
|
-
# Return &block
|
30
|
-
#
|
31
|
-
# Start the Timer and re-evaluate the block repeatedly
|
32
23
|
def run
|
33
24
|
start
|
34
25
|
yield self
|
@@ -36,9 +27,8 @@ module SitePrism
|
|
36
27
|
stop
|
37
28
|
end
|
38
29
|
|
39
|
-
|
40
|
-
|
41
|
-
# Start the Timer in a separate process
|
30
|
+
private
|
31
|
+
|
42
32
|
def start
|
43
33
|
stop
|
44
34
|
return if wait_time.zero?
|
@@ -50,9 +40,6 @@ module SitePrism
|
|
50
40
|
end
|
51
41
|
end
|
52
42
|
|
53
|
-
# Return True
|
54
|
-
#
|
55
|
-
# Forcibly stop the timer, and kill any threads created by it
|
56
43
|
def stop
|
57
44
|
if @thread
|
58
45
|
@thread.kill
|
data/lib/site_prism/version.rb
CHANGED
data/lib/site_prism/waiter.rb
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
module SitePrism
|
4
4
|
# [SitePrism::Waiter]
|
5
5
|
class Waiter
|
6
|
-
# @return Boolean
|
7
|
-
#
|
8
6
|
# A looper that will wait until the passed in block evaluates to true
|
9
7
|
# Alternatively it will time out once the wait_time is exceeded
|
8
|
+
#
|
9
|
+
# @return [Boolean]
|
10
10
|
def self.wait_until_true(wait_time = Capybara.default_max_wait_time, sleep_duration = 0.05)
|
11
11
|
Timer.run(wait_time) do |timer|
|
12
12
|
loop do
|
data/lib/site_prism.rb
CHANGED
@@ -2,25 +2,25 @@
|
|
2
2
|
|
3
3
|
require 'site_prism/error'
|
4
4
|
require 'site_prism/all_there'
|
5
|
+
|
5
6
|
require 'addressable/template'
|
6
7
|
require 'forwardable'
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
autoload :Section, 'site_prism/section'
|
21
|
-
autoload :Timer, 'site_prism/timer'
|
22
|
-
autoload :Waiter, 'site_prism/waiter'
|
9
|
+
require 'site_prism/addressable_url_matcher'
|
10
|
+
require 'site_prism/dsl'
|
11
|
+
require 'site_prism/dsl_validator'
|
12
|
+
require 'site_prism/deprecator'
|
13
|
+
require 'site_prism/element_checker'
|
14
|
+
require 'site_prism/loadable'
|
15
|
+
require 'site_prism/logger'
|
16
|
+
require 'site_prism/page'
|
17
|
+
require 'site_prism/rspec_matchers'
|
18
|
+
require 'site_prism/section'
|
19
|
+
require 'site_prism/timer'
|
20
|
+
require 'site_prism/waiter'
|
23
21
|
|
22
|
+
# [SitePrism]
|
23
|
+
module SitePrism
|
24
24
|
class << self
|
25
25
|
def configure
|
26
26
|
yield self
|