site_prism 1.3 → 1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|