site_prism 1.3 → 1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +8 -8
- data/lib/site_prism/element_checker.rb +1 -1
- data/lib/site_prism/element_container.rb +65 -69
- data/lib/site_prism/exceptions.rb +1 -1
- data/lib/site_prism/page.rb +8 -8
- data/lib/site_prism/section.rb +8 -8
- data/lib/site_prism/version.rb +1 -1
- metadata +10 -10
data/README.md
CHANGED
@@ -127,7 +127,7 @@ queried (is it enabled? visible?).
|
|
127
127
|
|
128
128
|
SitePrism is based around this concept, but goes further as you'll see
|
129
129
|
below by also allowing modelling of repeated sections that appear on
|
130
|
-
|
130
|
+
multiple pages, or many times on a page using the concept of sections.
|
131
131
|
|
132
132
|
## Pages
|
133
133
|
|
@@ -171,7 +171,7 @@ to the page using `#load`:
|
|
171
171
|
@home_page.load
|
172
172
|
```
|
173
173
|
|
174
|
-
This will tell
|
174
|
+
This will tell whichever capybara driver you have configured to
|
175
175
|
navigate to the URL set against that page's class.
|
176
176
|
|
177
177
|
### Verifying that a particular page is displayed
|
@@ -591,7 +591,7 @@ SitePrism provides the Section class for this task.
|
|
591
591
|
|
592
592
|
In the same way that SitePrism provides `element` and `elements`, it
|
593
593
|
provides `section` and `sections`. The first returns an instance of a
|
594
|
-
page section, the
|
594
|
+
page section, the second returns an array of section instances, one for
|
595
595
|
each capybara element found by the supplied css selector. What follows
|
596
596
|
is an explanation of `section`.
|
597
597
|
|
@@ -807,9 +807,9 @@ how they're used:
|
|
807
807
|
|
808
808
|
```ruby
|
809
809
|
@home = Home.new
|
810
|
-
@home.
|
810
|
+
@home.wait_until_menu_visible
|
811
811
|
# and...
|
812
|
-
@home.
|
812
|
+
@home.wait_until_menu_invisible
|
813
813
|
```
|
814
814
|
|
815
815
|
Again, as for an element, it is possible to give a specific amount of
|
@@ -817,9 +817,9 @@ time to wait for visibility/invisibility of a section. Here's how:
|
|
817
817
|
|
818
818
|
```ruby
|
819
819
|
@home = Home.new
|
820
|
-
@home.
|
820
|
+
@home.wait_until_menu_visible(5)
|
821
821
|
# and...
|
822
|
-
@home.
|
822
|
+
@home.wait_until_menu_invisible(3)
|
823
823
|
```
|
824
824
|
|
825
825
|
#### Sections within sections
|
@@ -1005,7 +1005,7 @@ end
|
|
1005
1005
|
|
1006
1006
|
SitePrism allows you to interact with iframes. An iframe is declared as
|
1007
1007
|
a `SitePrism::Page` class, and then referenced by the page or section it
|
1008
|
-
is
|
1008
|
+
is embedded into. Like a section, it is possible to test for the
|
1009
1009
|
existence of the iframe, wait for it to exist as well as interact with
|
1010
1010
|
the page it contains.
|
1011
1011
|
|
@@ -1,62 +1,42 @@
|
|
1
1
|
module SitePrism::ElementContainer
|
2
2
|
|
3
|
-
def element element_name,
|
4
|
-
|
5
|
-
create_no_locator element_name
|
6
|
-
else
|
7
|
-
add_element_name element_name.to_s
|
3
|
+
def element element_name, element_selector = nil
|
4
|
+
build element_name, element_selector do
|
8
5
|
define_method element_name.to_s do
|
9
|
-
find_one
|
6
|
+
find_one element_selector
|
10
7
|
end
|
11
8
|
end
|
12
|
-
create_existence_checker element_name, element_locator
|
13
|
-
create_waiter element_name, element_locator
|
14
|
-
create_visibility_waiter element_name, element_locator
|
15
|
-
create_invisibility_waiter element_name, element_locator
|
16
9
|
end
|
17
10
|
|
18
|
-
def elements collection_name,
|
19
|
-
|
20
|
-
create_no_locator collection_name
|
21
|
-
else
|
22
|
-
add_element_name collection_name
|
11
|
+
def elements collection_name, collection_selector = nil
|
12
|
+
build collection_name, collection_selector do
|
23
13
|
define_method collection_name.to_s do
|
24
|
-
find_all
|
14
|
+
find_all collection_selector
|
25
15
|
end
|
26
16
|
end
|
27
|
-
create_existence_checker collection_name, collection_locator
|
28
|
-
create_waiter collection_name, collection_locator
|
29
|
-
create_visibility_waiter collection_name, collection_locator
|
30
|
-
create_invisibility_waiter collection_name, collection_locator
|
31
17
|
end
|
32
18
|
alias :collection :elements
|
33
19
|
|
34
|
-
def section section_name, section_class,
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
create_invisibility_waiter section_name, section_locator
|
40
|
-
define_method section_name do
|
41
|
-
section_class.new find_one section_locator
|
20
|
+
def section section_name, section_class, section_selector
|
21
|
+
build section_name, section_selector do
|
22
|
+
define_method section_name do
|
23
|
+
section_class.new find_one section_selector
|
24
|
+
end
|
42
25
|
end
|
43
26
|
end
|
44
27
|
|
45
|
-
def sections section_collection_name, section_class,
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
define_method section_collection_name do
|
52
|
-
find_all(section_collection_locator).collect do |element|
|
53
|
-
section_class.new element
|
28
|
+
def sections section_collection_name, section_class, section_collection_selector
|
29
|
+
build section_collection_name, section_collection_selector do
|
30
|
+
define_method section_collection_name do
|
31
|
+
find_all(section_collection_selector).collect do |element|
|
32
|
+
section_class.new element
|
33
|
+
end
|
54
34
|
end
|
55
35
|
end
|
56
36
|
end
|
57
37
|
|
58
38
|
def iframe iframe_name, iframe_page_class, iframe_id
|
59
|
-
|
39
|
+
add_to_mapped_items iframe_name
|
60
40
|
create_existence_checker iframe_name, iframe_id
|
61
41
|
create_waiter iframe_name, iframe_id
|
62
42
|
define_method iframe_name do |&block|
|
@@ -66,57 +46,76 @@ module SitePrism::ElementContainer
|
|
66
46
|
end
|
67
47
|
end
|
68
48
|
|
69
|
-
def
|
70
|
-
@
|
71
|
-
@
|
49
|
+
def add_to_mapped_items item
|
50
|
+
@mapped_items ||= []
|
51
|
+
@mapped_items << item.to_s
|
72
52
|
end
|
73
53
|
|
74
|
-
def
|
75
|
-
@
|
54
|
+
def mapped_items
|
55
|
+
@mapped_items
|
76
56
|
end
|
77
57
|
|
78
58
|
private
|
59
|
+
|
60
|
+
def build name, selector
|
61
|
+
if selector.nil?
|
62
|
+
create_no_selector name
|
63
|
+
else
|
64
|
+
add_to_mapped_items name
|
65
|
+
yield
|
66
|
+
end
|
67
|
+
add_checkers_and_waiters name, selector
|
68
|
+
end
|
69
|
+
|
70
|
+
def add_checkers_and_waiters name, selector
|
71
|
+
create_existence_checker name, selector
|
72
|
+
create_waiter name, selector
|
73
|
+
create_visibility_waiter name, selector
|
74
|
+
create_invisibility_waiter name, selector
|
75
|
+
end
|
76
|
+
|
77
|
+
def build_checker_or_waiter element_name, proposed_method_name, selector
|
78
|
+
if selector.nil?
|
79
|
+
create_no_selector element_name, proposed_method_name
|
80
|
+
else
|
81
|
+
yield
|
82
|
+
end
|
83
|
+
end
|
79
84
|
|
80
|
-
def create_existence_checker element_name,
|
85
|
+
def create_existence_checker element_name, element_selector
|
81
86
|
method_name = "has_#{element_name.to_s}?"
|
82
|
-
|
83
|
-
create_no_locator element_name, method_name
|
84
|
-
else
|
87
|
+
build_checker_or_waiter element_name, method_name, element_selector do
|
85
88
|
define_method method_name do
|
86
89
|
Capybara.using_wait_time 0 do
|
87
|
-
element_exists?
|
90
|
+
element_exists? element_selector
|
88
91
|
end
|
89
92
|
end
|
90
93
|
end
|
91
94
|
end
|
92
95
|
|
93
|
-
def create_waiter element_name,
|
96
|
+
def create_waiter element_name, element_selector
|
94
97
|
method_name = "wait_for_#{element_name.to_s}"
|
95
|
-
|
96
|
-
create_no_locator element_name, method_name
|
97
|
-
else
|
98
|
+
build_checker_or_waiter element_name, method_name, element_selector do
|
98
99
|
define_method method_name do |*args| #used to use block args, but they don't work under ruby 1.8 :(
|
99
100
|
timeout = args.shift || Capybara.default_wait_time
|
100
101
|
Capybara.using_wait_time timeout do
|
101
|
-
element_waiter
|
102
|
+
element_waiter element_selector
|
102
103
|
end
|
103
104
|
end
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
107
|
-
def create_visibility_waiter element_name,
|
108
|
+
def create_visibility_waiter element_name, element_selector
|
108
109
|
method_name = "wait_until_#{element_name.to_s}_visible"
|
109
|
-
|
110
|
-
create_no_locator element_name, method_name
|
111
|
-
else
|
110
|
+
build_checker_or_waiter element_name, method_name, element_selector do
|
112
111
|
define_method method_name do |*args|
|
113
112
|
timeout = args.shift || Capybara.default_wait_time
|
114
113
|
Capybara.using_wait_time timeout do
|
115
|
-
element_waiter
|
114
|
+
element_waiter element_selector
|
116
115
|
end
|
117
116
|
begin
|
118
117
|
Timeout.timeout(timeout) do
|
119
|
-
sleep 0.1 until find_one(
|
118
|
+
sleep 0.1 until find_one(element_selector).visible?
|
120
119
|
end
|
121
120
|
rescue Timeout::Error
|
122
121
|
raise SitePrism::TimeOutWaitingForElementVisibility.new("#{element_name} did not become visible")
|
@@ -125,16 +124,14 @@ module SitePrism::ElementContainer
|
|
125
124
|
end
|
126
125
|
end
|
127
126
|
|
128
|
-
def create_invisibility_waiter element_name,
|
127
|
+
def create_invisibility_waiter element_name, element_selector
|
129
128
|
method_name = "wait_until_#{element_name.to_s}_invisible"
|
130
|
-
|
131
|
-
create_no_locator element_name, method_name
|
132
|
-
else
|
129
|
+
build_checker_or_waiter element_name, method_name, element_selector do
|
133
130
|
define_method method_name do |*args|
|
134
131
|
timeout = args.shift || Capybara.default_wait_time
|
135
132
|
begin
|
136
133
|
Timeout.timeout(timeout) do
|
137
|
-
sleep 0.1 while element_exists?(
|
134
|
+
sleep 0.1 while element_exists?(element_selector) && find_one(element_selector).visible?
|
138
135
|
end
|
139
136
|
rescue Timeout::Error
|
140
137
|
raise SitePrism::TimeOutWaitingForElementInvisibility.new("#{element_name} did not become invisible")
|
@@ -143,11 +140,10 @@ module SitePrism::ElementContainer
|
|
143
140
|
end
|
144
141
|
end
|
145
142
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
raise SitePrism::NoLocatorForElement.new("#{self.class.name} => :#{element_name} needs a locator")
|
143
|
+
def create_no_selector element_name, method_name = nil
|
144
|
+
no_selector_method_name = method_name.nil? ? element_name : method_name
|
145
|
+
define_method no_selector_method_name do
|
146
|
+
raise SitePrism::NoSelectorForElement.new("#{self.class.name} => :#{element_name} needs a selector")
|
151
147
|
end
|
152
148
|
end
|
153
149
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module SitePrism
|
2
2
|
class NoUrlForPage < StandardError; end
|
3
3
|
class NoUrlMatcherForPage < StandardError; end
|
4
|
-
class
|
4
|
+
class NoSelectorForElement < StandardError; end
|
5
5
|
class TimeOutWaitingForElementVisibility < StandardError; end
|
6
6
|
class TimeOutWaitingForElementInvisibility < StandardError; end
|
7
7
|
end
|
data/lib/site_prism/page.rb
CHANGED
@@ -49,20 +49,20 @@ module SitePrism
|
|
49
49
|
|
50
50
|
private
|
51
51
|
|
52
|
-
def find_one
|
53
|
-
find
|
52
|
+
def find_one selector
|
53
|
+
find selector
|
54
54
|
end
|
55
55
|
|
56
|
-
def find_all
|
57
|
-
all
|
56
|
+
def find_all selector
|
57
|
+
all selector
|
58
58
|
end
|
59
59
|
|
60
|
-
def element_exists?
|
61
|
-
has_selector?
|
60
|
+
def element_exists? selector
|
61
|
+
has_selector? selector
|
62
62
|
end
|
63
63
|
|
64
|
-
def element_waiter
|
65
|
-
wait_until { element_exists?
|
64
|
+
def element_waiter selector
|
65
|
+
wait_until { element_exists? selector }
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
data/lib/site_prism/section.rb
CHANGED
@@ -24,20 +24,20 @@ module SitePrism
|
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
-
def find_one
|
28
|
-
root_element.find
|
27
|
+
def find_one selector
|
28
|
+
root_element.find selector
|
29
29
|
end
|
30
30
|
|
31
|
-
def find_all
|
32
|
-
root_element.all
|
31
|
+
def find_all selector
|
32
|
+
root_element.all selector
|
33
33
|
end
|
34
34
|
|
35
|
-
def element_exists?
|
36
|
-
root_element.has_selector?
|
35
|
+
def element_exists? selector
|
36
|
+
root_element.has_selector? selector
|
37
37
|
end
|
38
38
|
|
39
|
-
def element_waiter
|
40
|
-
Capybara.current_session.wait_until { element_exists?
|
39
|
+
def element_waiter selector
|
40
|
+
Capybara.current_session.wait_until { element_exists? selector }
|
41
41
|
end
|
42
42
|
end
|
43
43
|
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: '1.
|
4
|
+
version: '1.4'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,40 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.1
|
21
|
+
version: '1.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.1
|
29
|
+
version: '1.1'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rspec
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 2.0
|
37
|
+
version: '2.0'
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 2.0
|
45
|
+
version: '2.0'
|
46
46
|
description: SitePrism gives you a simple, clean and semantic DSL for describing your
|
47
47
|
site using the Page Object Model pattern, for use with Capybara
|
48
48
|
email:
|