site_prism 3.6 → 3.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +28 -13
- data/lib/site_prism/recursion_checker.rb +1 -0
- data/lib/site_prism/section.rb +45 -31
- data/lib/site_prism/version.rb +1 -1
- metadata +8 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: adf8cf393fc3ad828528159a54048e54c3c396f3743c79b10a75ea313ddd135c
|
4
|
+
data.tar.gz: f2fb2ecb2f8942e3e59228994da32262a65b14a2c49f573468100f1aca799061
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aecf017750d915a617052242d8959af91ec1b154e5d394f2fa7df096649cf198052ecdf25cef22476f88682c45d71ff6c49c39262726d7d75ea33d07b751f47b
|
7
|
+
data.tar.gz: e2ed8f07246c08e910fd870ecc9140f813619109b107ae6448d59f98176b84b6f50c58cc8609615e68f5ddd0e09076b3b30f906fe0647994d78ec4df7b2d1941
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ _A Page Object Model DSL for Capybara_
|
|
7
7
|
SitePrism gives you a simple, clean and semantic DSL for describing your site using the Page Object Model pattern,
|
8
8
|
for use with Capybara in automated acceptance testing.
|
9
9
|
|
10
|
-
Find the pretty documentation here:
|
10
|
+
Find the pretty documentation here: https://rdoc.info/gems/site_prism/frames
|
11
11
|
|
12
12
|
Make sure to add your project/company to https://github.com/site-prism/site_prism/wiki/Who-is-using-SitePrism
|
13
13
|
|
@@ -23,7 +23,7 @@ SitePrism is built and tested to work on Ruby 2.4 - 2.6. Ruby 2.3 (Now EOL), is
|
|
23
23
|
If you are using SitePrism with Ruby 2.3 it is highly advisable to upgrade to a more modern Ruby
|
24
24
|
such as 2.6 or 2.7, if for any other reason, to get a noticeable speed boost!
|
25
25
|
|
26
|
-
SitePrism should run on all major browsers. The gem's integration tests are
|
26
|
+
SitePrism should run on all major browsers. The gem's integration tests are run on Chrome and Firefox.
|
27
27
|
|
28
28
|
If you find you cannot integrate nicely with SitePrism, please open an
|
29
29
|
[issue request](https://github.com/site-prism/site_prism/issues/new)
|
@@ -298,7 +298,13 @@ expect(@account_page).to be_displayed
|
|
298
298
|
```
|
299
299
|
|
300
300
|
Calling `#displayed?` will return true if the browser's current URL
|
301
|
-
matches the page's template and false if it doesn't.
|
301
|
+
matches the page's template and false if it doesn't. It will wait for
|
302
|
+
`Capybara.default_max_wait_time` seconds or you can pass an explicit
|
303
|
+
wait time in seconds as the first argument like this:
|
304
|
+
|
305
|
+
```ruby
|
306
|
+
@account_page.displayed?(10) # wait up to 10 seconds for display
|
307
|
+
```
|
302
308
|
|
303
309
|
#### Specifying parameter values for templated URLs
|
304
310
|
|
@@ -425,8 +431,11 @@ as a string.
|
|
425
431
|
#### Accessing the individual element
|
426
432
|
|
427
433
|
The `element` method will add a number of methods to instances of the
|
428
|
-
particular Page class. The first method
|
429
|
-
element.
|
434
|
+
particular Page class. The first method added is the name of the
|
435
|
+
element. It finds the element using [Capybara::Node::Finders#find](https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/Node/Finders#find-instance_method)
|
436
|
+
returning a [Capybara::Node::Element](https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/Node/Element) or
|
437
|
+
raising [Capybara::ElementNotFound](https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/ElementNotFound)
|
438
|
+
if the element can not be found.
|
430
439
|
|
431
440
|
```ruby
|
432
441
|
class Home < SitePrism::Page
|
@@ -450,7 +459,9 @@ end
|
|
450
459
|
#### Testing for the existence of the element
|
451
460
|
|
452
461
|
Another method added to the Page class by the `element` method is the
|
453
|
-
`has_<element_name>?` method.
|
462
|
+
`has_<element_name>?` method.
|
463
|
+
This method delegates to [Capybara::Node::Matchers#has_selector?](https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/Node/Matchers#has_selector%3F-instance_method).
|
464
|
+
Using the same example as above:
|
454
465
|
|
455
466
|
```ruby
|
456
467
|
class Home < SitePrism::Page
|
@@ -480,7 +491,9 @@ end
|
|
480
491
|
|
481
492
|
To test that an element does not exist on the page, it is not possible to just call
|
482
493
|
`#not_to have_search_field`. SitePrism supplies the `#has_no_<element>?` method
|
483
|
-
that should be used to test for non-existence.
|
494
|
+
that should be used to test for non-existence.
|
495
|
+
This method delegates to [Capybara::Node::Matchers#has_no_selector?](https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/Node/Matchers#has_no_selector%3F-instance_method)
|
496
|
+
Using the above example:
|
484
497
|
|
485
498
|
```ruby
|
486
499
|
@home = Home.new
|
@@ -499,8 +512,9 @@ end
|
|
499
512
|
#### Waiting for an element to become visible
|
500
513
|
|
501
514
|
A method that gets added by calling `element` is the
|
502
|
-
`wait_until_<element_name>_visible` method.
|
503
|
-
|
515
|
+
`wait_until_<element_name>_visible` method.
|
516
|
+
This method delegates to [Capybara::Node::Matchers#has_selector?](https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/Node/Matchers#has_selector%3F-instance_method).
|
517
|
+
Calling this method will cause the test to wait for Capybara's default wait time for the element
|
504
518
|
to become visible. You can customise the wait time by supplying a number
|
505
519
|
of seconds to wait in-line or configuring the default wait time.
|
506
520
|
|
@@ -513,10 +527,11 @@ of seconds to wait in-line or configuring the default wait time.
|
|
513
527
|
#### Waiting for an element to become invisible
|
514
528
|
|
515
529
|
Another method added by calling `element` is the
|
516
|
-
`wait_until_<element_name>_invisible` method.
|
517
|
-
|
518
|
-
|
519
|
-
|
530
|
+
`wait_until_<element_name>_invisible` method.
|
531
|
+
This method delegates to [Capybara::Node::Matchers#has_no_selector?](https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/Node/Matchers#has_no_selector%3F-instance_method).
|
532
|
+
Calling this method will cause the test to wait for Capybara's default
|
533
|
+
wait time for the element to become invisible. You can as with the visibility
|
534
|
+
waiter, customise the wait time in the same way.
|
520
535
|
|
521
536
|
```ruby
|
522
537
|
@home.wait_until_search_field_invisible
|
data/lib/site_prism/section.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
module SitePrism
|
4
4
|
class Section
|
5
|
-
include Capybara::DSL
|
6
5
|
include ElementChecker
|
7
6
|
include Loadable
|
8
7
|
include DSL
|
@@ -10,17 +9,26 @@ module SitePrism
|
|
10
9
|
|
11
10
|
attr_reader :root_element, :parent
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
class << self
|
13
|
+
def set_default_search_arguments(*args)
|
14
|
+
@default_search_arguments = args
|
15
|
+
end
|
16
|
+
|
17
|
+
def default_search_arguments
|
18
|
+
return @default_search_arguments if @default_search_arguments
|
19
|
+
|
20
|
+
superclass.respond_to?(:default_search_arguments) && superclass.default_search_arguments
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
16
24
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
25
|
+
def root_element_methods
|
26
|
+
::Capybara::Session::NODE_METHODS + %i[native visible?]
|
27
|
+
end
|
28
|
+
|
29
|
+
def session_methods
|
30
|
+
::Capybara::Session::DSL_METHODS - root_element_methods
|
31
|
+
end
|
24
32
|
end
|
25
33
|
|
26
34
|
def initialize(parent, root_element, &block)
|
@@ -29,29 +37,39 @@ module SitePrism
|
|
29
37
|
within(&block) if block_given?
|
30
38
|
end
|
31
39
|
|
32
|
-
|
33
|
-
|
40
|
+
# Send all root_element methods through `#root_element`
|
41
|
+
# NB: This requires a method called `#to_capybara_node` being created and
|
42
|
+
# then set to this value (Capybara agnostic API)
|
43
|
+
root_element_methods.each do |method|
|
44
|
+
def_delegators :root_element, method
|
34
45
|
end
|
35
46
|
|
36
|
-
#
|
37
|
-
#
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
return root_element if root_element
|
47
|
+
# Send all methods that previously acted on the `#page` method that existed previously
|
48
|
+
# through to the same location - But directly as `Capybara.current_session`
|
49
|
+
session_methods.each do |method|
|
50
|
+
def_delegators :capybara_session, method
|
51
|
+
end
|
42
52
|
|
43
|
-
|
44
|
-
|
53
|
+
# This scopes our calls inside Section correctly to the `Capybara::Node::Element`
|
54
|
+
def to_capybara_node
|
55
|
+
root_element
|
45
56
|
end
|
46
57
|
|
47
|
-
|
48
|
-
|
58
|
+
# This allows us to return anything thats passed in as a block to the section at
|
59
|
+
# creation time, so that an anonymous section or such-like will have the extra methods
|
60
|
+
def within
|
61
|
+
Capybara.within(root_element) { yield(self) }
|
49
62
|
end
|
50
63
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
64
|
+
# This was the old API-style of delegating through the Capybara.page call and over-loading
|
65
|
+
# the method so we always went through our correct `root_element`
|
66
|
+
def page
|
67
|
+
SitePrism::Deprecator.deprecate('Using page inside section')
|
68
|
+
return root_element if root_element
|
69
|
+
|
70
|
+
SitePrism.logger.warn('Root Element not found; Falling back to Capybara.current_session')
|
71
|
+
capybara_session
|
72
|
+
end
|
55
73
|
|
56
74
|
def capybara_session
|
57
75
|
Capybara.current_session
|
@@ -62,9 +80,5 @@ module SitePrism
|
|
62
80
|
candidate = candidate.parent until candidate.is_a?(SitePrism::Page)
|
63
81
|
candidate
|
64
82
|
end
|
65
|
-
|
66
|
-
def native
|
67
|
-
root_element.native
|
68
|
-
end
|
69
83
|
end
|
70
84
|
end
|
data/lib/site_prism/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: site_prism
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '3.
|
4
|
+
version: '3.7'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Hill
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-10-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -29,22 +29,16 @@ dependencies:
|
|
29
29
|
name: capybara
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '3.8'
|
35
|
-
- - "<="
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '3.29'
|
38
35
|
type: :runtime
|
39
36
|
prerelease: false
|
40
37
|
version_requirements: !ruby/object:Gem::Requirement
|
41
38
|
requirements:
|
42
|
-
- - "
|
39
|
+
- - "~>"
|
43
40
|
- !ruby/object:Gem::Version
|
44
41
|
version: '3.8'
|
45
|
-
- - "<="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.29'
|
48
42
|
- !ruby/object:Gem::Dependency
|
49
43
|
name: site_prism-all_there
|
50
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,14 +121,14 @@ dependencies:
|
|
127
121
|
requirements:
|
128
122
|
- - "~>"
|
129
123
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
124
|
+
version: 0.83.0
|
131
125
|
type: :development
|
132
126
|
prerelease: false
|
133
127
|
version_requirements: !ruby/object:Gem::Requirement
|
134
128
|
requirements:
|
135
129
|
- - "~>"
|
136
130
|
- !ruby/object:Gem::Version
|
137
|
-
version: 0.
|
131
|
+
version: 0.83.0
|
138
132
|
- !ruby/object:Gem::Dependency
|
139
133
|
name: rubocop-performance
|
140
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,7 +163,7 @@ dependencies:
|
|
169
163
|
requirements:
|
170
164
|
- - ">="
|
171
165
|
- !ruby/object:Gem::Version
|
172
|
-
version: '3.
|
166
|
+
version: '3.11'
|
173
167
|
- - "<"
|
174
168
|
- !ruby/object:Gem::Version
|
175
169
|
version: '4.1'
|
@@ -179,7 +173,7 @@ dependencies:
|
|
179
173
|
requirements:
|
180
174
|
- - ">="
|
181
175
|
- !ruby/object:Gem::Version
|
182
|
-
version: '3.
|
176
|
+
version: '3.11'
|
183
177
|
- - "<"
|
184
178
|
- !ruby/object:Gem::Version
|
185
179
|
version: '4.1'
|