page-object 0.8.3 → 0.8.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/ChangeLog +4 -0
- data/lib/page-object/page_factory.rb +4 -77
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +1 -0
- data/spec/page-object/page_factory_spec.rb +10 -6
- metadata +20 -4
data/ChangeLog
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'page_navigation'
|
2
|
+
|
1
3
|
module PageObject
|
2
4
|
#
|
3
5
|
# Module to facilitate to creating of page objects in step definitions. You
|
@@ -33,6 +35,8 @@ module PageObject
|
|
33
35
|
# to the method.
|
34
36
|
#
|
35
37
|
module PageFactory
|
38
|
+
include PageNavigation
|
39
|
+
|
36
40
|
|
37
41
|
#
|
38
42
|
# Create and navigate to a page object. The navigation will only work if the
|
@@ -92,55 +96,6 @@ module PageObject
|
|
92
96
|
# Support 'if' for readability of usage
|
93
97
|
alias_method :if, :if_page
|
94
98
|
|
95
|
-
#
|
96
|
-
# Navigate to a specific page following a predefined path.
|
97
|
-
#
|
98
|
-
# This method requires a lot of setup. See the documentation for
|
99
|
-
# this class. Once the setup is complete you can navigate to a
|
100
|
-
# page traversing through all other pages along the way. It will
|
101
|
-
# call the method you specified in the routes for each
|
102
|
-
# page as it navigates. Using the example setup defined in the
|
103
|
-
# documentation above you can call the method two ways:
|
104
|
-
#
|
105
|
-
# @example
|
106
|
-
# page.navigate_to(PageThree) # will use the default path
|
107
|
-
# page.navigate_to(PageThree, :using => :another_route)
|
108
|
-
#
|
109
|
-
# @param [PageObject] a class that has included the PageObject
|
110
|
-
# module and which has the navigation_method defined
|
111
|
-
# @param [Hash] a hash that contains an element with the key
|
112
|
-
# :using. This will be used to lookup the route. It has a
|
113
|
-
# default value of :default.
|
114
|
-
# @param [block] an optional block to be called
|
115
|
-
# @return [PageObject] the page you are navigating to
|
116
|
-
#
|
117
|
-
def navigate_to(page_cls, how = {:using => :default}, &block)
|
118
|
-
path = path_for how
|
119
|
-
to_index = find_index_for(path, page_cls)-1
|
120
|
-
navigate_through_pages(path[0..to_index])
|
121
|
-
on_page(page_cls, &block)
|
122
|
-
end
|
123
|
-
|
124
|
-
#
|
125
|
-
# Same as navigate_to except it will start at the @current_page
|
126
|
-
# instead the beginning of the path.
|
127
|
-
#
|
128
|
-
# @param [PageObject] a class that has included the PageObject
|
129
|
-
# module and which has the navigation_method defined
|
130
|
-
# @param [Hash] a hash that contains an element with the key
|
131
|
-
# :using. This will be used to lookup the route. It has a
|
132
|
-
# default value of :default.
|
133
|
-
# @param [block] an optional block to be called
|
134
|
-
# @return [PageObject] the page you are navigating to
|
135
|
-
#
|
136
|
-
def continue_navigation_to(page_cls, how = {:using => :default}, &block)
|
137
|
-
path = path_for how
|
138
|
-
from_index = find_index_for(path, @current_page.class)+1
|
139
|
-
to_index = find_index_for(path, page_cls)-1
|
140
|
-
navigate_through_pages(path[from_index..to_index])
|
141
|
-
on_page(page_cls, &block)
|
142
|
-
end
|
143
|
-
|
144
99
|
private
|
145
100
|
|
146
101
|
def class_from_string(str)
|
@@ -148,33 +103,5 @@ module PageObject
|
|
148
103
|
mod.const_get(class_name)
|
149
104
|
end
|
150
105
|
end
|
151
|
-
|
152
|
-
def path_for(how)
|
153
|
-
path = PageObject::PageFactory.page_object_routes[how[:using]]
|
154
|
-
fail("PageFactory route :#{how[:using].to_s} not found") unless path
|
155
|
-
path
|
156
|
-
end
|
157
|
-
|
158
|
-
def navigate_through_pages(pages)
|
159
|
-
pages.each do |cls, method, *args|
|
160
|
-
page = on_page(cls)
|
161
|
-
fail("Navigation method not specified on #{cls}.") unless page.respond_to? method
|
162
|
-
page.send method unless args
|
163
|
-
page.send method, *args if args
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
def find_index_for(path, item)
|
168
|
-
path.find_index { |each| each[0] == item}
|
169
|
-
end
|
170
|
-
|
171
|
-
class << self
|
172
|
-
attr_accessor :page_object_routes
|
173
|
-
|
174
|
-
def routes=(routes)
|
175
|
-
raise("You must provide a :default route for PageFactory routes") unless routes[:default]
|
176
|
-
@page_object_routes = routes
|
177
|
-
end
|
178
|
-
end
|
179
106
|
end
|
180
107
|
end
|
data/lib/page-object/version.rb
CHANGED
data/page-object.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
|
22
22
|
s.add_dependency 'watir-webdriver', '>= 0.6.2'
|
23
23
|
s.add_dependency 'selenium-webdriver', '>= 2.29.0'
|
24
|
+
s.add_dependency 'page_navigation', '>= 0.3'
|
24
25
|
|
25
26
|
s.add_development_dependency 'rspec', '>= 2.12.0'
|
26
27
|
s.add_development_dependency 'cucumber', '>= 1.2.0'
|
@@ -184,7 +184,7 @@ describe PageObject::PageFactory do
|
|
184
184
|
it "should store the routes" do
|
185
185
|
routes = ['a', 'b', 'c']
|
186
186
|
PageObject::PageFactory.routes = {:default => routes}
|
187
|
-
PageObject::PageFactory.
|
187
|
+
PageObject::PageFactory.routes[:default].should == routes
|
188
188
|
end
|
189
189
|
|
190
190
|
it "should navigate to a page calling the default methods" do
|
@@ -226,12 +226,16 @@ describe PageObject::PageFactory do
|
|
226
226
|
[AnotherPage, :b_method],
|
227
227
|
[YetAnotherPage, :c_method]]
|
228
228
|
}
|
229
|
-
|
230
|
-
AnotherPage.should_receive(:new).and_return(fake_page)
|
231
|
-
fake_page.should_receive(:respond_to?).with(:b_method).and_return(true)
|
232
|
-
fake_page.should_receive(:b_method)
|
229
|
+
|
233
230
|
@world.current_page = FactoryTestPage.new(@world.browser)
|
234
|
-
FactoryTestPage.
|
231
|
+
f_page = FactoryTestPage.new(@world.browser)
|
232
|
+
FactoryTestPage.should_receive(:new).and_return(f_page)
|
233
|
+
f_page.should_receive(:respond_to?).with(:a_method).and_return(true)
|
234
|
+
f_page.should_receive(:a_method)
|
235
|
+
a_page = AnotherPage.new(@world.browser)
|
236
|
+
AnotherPage.should_receive(:new).and_return(a_page)
|
237
|
+
a_page.should_receive(:respond_to?).with(:b_method).and_return(true)
|
238
|
+
a_page.should_receive(:b_method)
|
235
239
|
@world.continue_navigation_to(YetAnotherPage).class.should == YetAnotherPage
|
236
240
|
end
|
237
241
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page-object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.4
|
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-01-
|
12
|
+
date: 2013-01-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: watir-webdriver
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: 2.29.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: page_navigation
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.3'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.3'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: rspec
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -381,7 +397,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
381
397
|
version: '0'
|
382
398
|
segments:
|
383
399
|
- 0
|
384
|
-
hash: -
|
400
|
+
hash: -1959030872660536496
|
385
401
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
386
402
|
none: false
|
387
403
|
requirements:
|
@@ -390,7 +406,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
390
406
|
version: '0'
|
391
407
|
segments:
|
392
408
|
- 0
|
393
|
-
hash: -
|
409
|
+
hash: -1959030872660536496
|
394
410
|
requirements: []
|
395
411
|
rubyforge_project: page-object
|
396
412
|
rubygems_version: 1.8.24
|