site_prism 2.2 → 2.3
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 +58 -1
- data/lib/site_prism.rb +1 -0
- data/lib/site_prism/element_container.rb +22 -23
- data/lib/site_prism/page.rb +7 -5
- data/lib/site_prism/version.rb +1 -1
- metadata +19 -3
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Here's an overview of how SitePrism is designed to be used:
|
|
15
15
|
# define our site's pages
|
16
16
|
|
17
17
|
class Home < SitePrism::Page
|
18
|
-
set_url "
|
18
|
+
set_url "/index.htm"
|
19
19
|
set_url_matcher /google.com\/?/
|
20
20
|
|
21
21
|
element :search_field, "input[name='q']"
|
@@ -159,10 +159,39 @@ class Home < SitePrism::Page
|
|
159
159
|
end
|
160
160
|
```
|
161
161
|
|
162
|
+
If you've set Capybara's `app_host` then you can set the URL as follows:
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
class Home < SitePrism::Page
|
166
|
+
set_url "/home.htm"
|
167
|
+
end
|
168
|
+
```
|
169
|
+
|
162
170
|
Note that setting a URL is optional - you only need to set a url if you want to be able to navigate
|
163
171
|
directly to that page. It makes sense to set the URL for a page model of a home
|
164
172
|
page or a login page, but probably not a search results page.
|
165
173
|
|
174
|
+
#### Parameterized URLs
|
175
|
+
|
176
|
+
SitePrism uses the Addressable gem and therefore allows for parameterized URLs. Here is
|
177
|
+
a simple example:
|
178
|
+
|
179
|
+
```ruby
|
180
|
+
class UserProfile < SitePris::Page
|
181
|
+
set_url "/users{/username}"
|
182
|
+
end
|
183
|
+
```
|
184
|
+
|
185
|
+
...and a more complex example:
|
186
|
+
|
187
|
+
```ruby
|
188
|
+
class Search < SitePris::Page
|
189
|
+
set_url "/search{?query*}"
|
190
|
+
end
|
191
|
+
```
|
192
|
+
|
193
|
+
See https://github.com/sporkmonger/addressable for more details on parameterized URLs.
|
194
|
+
|
166
195
|
### Navigating to the Page
|
167
196
|
|
168
197
|
Once the URL has been set (using `set_url`), you can navigate directly
|
@@ -173,9 +202,37 @@ to the page using `#load`:
|
|
173
202
|
@home_page.load
|
174
203
|
```
|
175
204
|
|
205
|
+
#### Navigating to a page with a parameterized URL
|
206
|
+
|
207
|
+
The `#load` method takes parameters and will apply them to the URL. Using the examples above:
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
class UserProfile < SitePris::Page
|
211
|
+
set_url "/users{/username}"
|
212
|
+
end
|
213
|
+
|
214
|
+
@user_profile = UserProfile.new
|
215
|
+
@user_profile.load #=> /users
|
216
|
+
@user_profile.load(username: 'bob') #=> loads /users/bob
|
217
|
+
```
|
218
|
+
|
219
|
+
...and...
|
220
|
+
|
221
|
+
```ruby
|
222
|
+
class Search < SitePris::Page
|
223
|
+
set_url "/search{?query*}"
|
224
|
+
end
|
225
|
+
|
226
|
+
@search = Search.new
|
227
|
+
@search.load(query: 'simple') #=> loads /search?query=simple
|
228
|
+
@search.load(query: {'color'=> 'red', 'text'=> 'blue'}) #=> loads /search?color=red&text=blue
|
229
|
+
```
|
230
|
+
|
176
231
|
This will tell whichever capybara driver you have configured to
|
177
232
|
navigate to the URL set against that page's class.
|
178
233
|
|
234
|
+
See https://github.com/sporkmonger/addressable for more details on parameterized URLs.
|
235
|
+
|
179
236
|
### Verifying that a particular page is displayed
|
180
237
|
|
181
238
|
Automated tests often need to verify that a particular page is
|
data/lib/site_prism.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module SitePrism::ElementContainer
|
2
2
|
|
3
|
-
def element
|
3
|
+
def element(element_name, *find_args)
|
4
4
|
build element_name, *find_args do
|
5
5
|
define_method element_name.to_s do
|
6
6
|
find_first *find_args
|
@@ -8,7 +8,7 @@ module SitePrism::ElementContainer
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def elements
|
11
|
+
def elements(collection_name, *find_args)
|
12
12
|
build collection_name, *find_args do
|
13
13
|
define_method collection_name.to_s do
|
14
14
|
find_all *find_args
|
@@ -17,7 +17,7 @@ module SitePrism::ElementContainer
|
|
17
17
|
end
|
18
18
|
alias :collection :elements
|
19
19
|
|
20
|
-
def section
|
20
|
+
def section(section_name, section_class, *find_args)
|
21
21
|
build section_name, *find_args do
|
22
22
|
define_method section_name do
|
23
23
|
section_class.new self, find_first(*find_args)
|
@@ -25,7 +25,7 @@ module SitePrism::ElementContainer
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def sections
|
28
|
+
def sections(section_collection_name, section_class, *find_args)
|
29
29
|
build section_collection_name, *find_args do
|
30
30
|
define_method section_collection_name do
|
31
31
|
find_all(*find_args).collect do |element|
|
@@ -35,7 +35,7 @@ module SitePrism::ElementContainer
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def iframe
|
38
|
+
def iframe(iframe_name, iframe_page_class, iframe_id)
|
39
39
|
add_to_mapped_items iframe_name
|
40
40
|
create_existence_checker iframe_name, iframe_id
|
41
41
|
create_waiter iframe_name, iframe_id
|
@@ -46,7 +46,7 @@ module SitePrism::ElementContainer
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
def add_to_mapped_items
|
49
|
+
def add_to_mapped_items(item)
|
50
50
|
@mapped_items ||= []
|
51
51
|
@mapped_items << item.to_s
|
52
52
|
end
|
@@ -57,34 +57,34 @@ module SitePrism::ElementContainer
|
|
57
57
|
|
58
58
|
private
|
59
59
|
|
60
|
-
def build
|
60
|
+
def build(name, *find_args)
|
61
61
|
if find_args.empty?
|
62
62
|
create_no_selector name
|
63
63
|
else
|
64
64
|
add_to_mapped_items name
|
65
65
|
yield
|
66
66
|
end
|
67
|
-
|
67
|
+
add_helper_methods name, *find_args
|
68
68
|
end
|
69
69
|
|
70
|
-
def
|
70
|
+
def add_helper_methods(name, *find_args)
|
71
71
|
create_existence_checker name, *find_args
|
72
72
|
create_waiter name, *find_args
|
73
73
|
create_visibility_waiter name, *find_args
|
74
74
|
create_invisibility_waiter name, *find_args
|
75
75
|
end
|
76
76
|
|
77
|
-
def
|
77
|
+
def create_helper_method(proposed_method_name, *find_args)
|
78
78
|
if find_args.empty?
|
79
|
-
create_no_selector
|
79
|
+
create_no_selector proposed_method_name
|
80
80
|
else
|
81
81
|
yield
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
def create_existence_checker
|
85
|
+
def create_existence_checker(element_name, *find_args)
|
86
86
|
method_name = "has_#{element_name.to_s}?"
|
87
|
-
|
87
|
+
create_helper_method method_name, *find_args do
|
88
88
|
define_method method_name do
|
89
89
|
Capybara.using_wait_time 0 do
|
90
90
|
element_exists? *find_args
|
@@ -93,9 +93,9 @@ module SitePrism::ElementContainer
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
def create_waiter
|
96
|
+
def create_waiter(element_name, *find_args)
|
97
97
|
method_name = "wait_for_#{element_name.to_s}"
|
98
|
-
|
98
|
+
create_helper_method method_name, *find_args do
|
99
99
|
define_method method_name do |timeout = Capybara.default_wait_time|
|
100
100
|
Capybara.using_wait_time timeout do
|
101
101
|
element_exists? *find_args
|
@@ -104,9 +104,9 @@ module SitePrism::ElementContainer
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
-
def create_visibility_waiter
|
107
|
+
def create_visibility_waiter(element_name, *find_args)
|
108
108
|
method_name = "wait_until_#{element_name.to_s}_visible"
|
109
|
-
|
109
|
+
create_helper_method method_name, *find_args do
|
110
110
|
define_method method_name do |timeout = Capybara.default_wait_time|
|
111
111
|
Capybara.using_wait_time timeout do
|
112
112
|
element_exists? *find_args
|
@@ -118,9 +118,9 @@ module SitePrism::ElementContainer
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
def create_invisibility_waiter
|
121
|
+
def create_invisibility_waiter(element_name, *find_args)
|
122
122
|
method_name = "wait_until_#{element_name.to_s}_invisible"
|
123
|
-
|
123
|
+
create_helper_method method_name, *find_args do
|
124
124
|
define_method method_name do |timeout = Capybara.default_wait_time|
|
125
125
|
Timeout.timeout timeout, SitePrism::TimeOutWaitingForElementInvisibility do
|
126
126
|
Capybara.using_wait_time 0 do
|
@@ -131,10 +131,9 @@ module SitePrism::ElementContainer
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
def create_no_selector
|
135
|
-
|
136
|
-
|
137
|
-
raise SitePrism::NoSelectorForElement.new("#{self.class.name} => :#{element_name} needs a selector")
|
134
|
+
def create_no_selector(method_name)
|
135
|
+
define_method method_name do
|
136
|
+
raise SitePrism::NoSelectorForElement.new("#{self.class.name} => :#{method_name} needs a selector")
|
138
137
|
end
|
139
138
|
end
|
140
139
|
end
|
data/lib/site_prism/page.rb
CHANGED
@@ -4,9 +4,10 @@ module SitePrism
|
|
4
4
|
include ElementChecker
|
5
5
|
extend ElementContainer
|
6
6
|
|
7
|
-
def load
|
8
|
-
|
9
|
-
|
7
|
+
def load(expansion = {})
|
8
|
+
expanded_url = url(expansion)
|
9
|
+
raise SitePrism::NoUrlForPage if expanded_url.nil?
|
10
|
+
visit expanded_url
|
10
11
|
end
|
11
12
|
|
12
13
|
def displayed?
|
@@ -30,8 +31,9 @@ module SitePrism
|
|
30
31
|
@url_matcher
|
31
32
|
end
|
32
33
|
|
33
|
-
def url
|
34
|
-
self.class.url
|
34
|
+
def url(expansion = {})
|
35
|
+
return nil if self.class.url.nil?
|
36
|
+
Addressable::Template.new(self.class.url).expand(expansion).to_s
|
35
37
|
end
|
36
38
|
|
37
39
|
def url_matcher
|
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: '2.
|
4
|
+
version: '2.3'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
@@ -49,6 +49,22 @@ dependencies:
|
|
49
49
|
- - ~>
|
50
50
|
- !ruby/object:Gem::Version
|
51
51
|
version: '2.0'
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: addressable
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 2.3.3
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 2.3.3
|
52
68
|
description: SitePrism gives you a simple, clean and semantic DSL for describing your
|
53
69
|
site using the Page Object Model pattern, for use with Capybara
|
54
70
|
email: nat@natontesting.com
|
@@ -85,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
101
|
version: '0'
|
86
102
|
requirements: []
|
87
103
|
rubyforge_project:
|
88
|
-
rubygems_version: 1.8.
|
104
|
+
rubygems_version: 1.8.25
|
89
105
|
signing_key:
|
90
106
|
specification_version: 3
|
91
107
|
summary: A Page Object Model DSL for Capybara
|