page-object 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +7 -1
- data/ChangeLog +11 -0
- data/README.md +51 -37
- data/features/javascript.feature +4 -0
- data/features/page_level_actions.feature +10 -1
- data/features/select_list.feature +5 -3
- data/features/step_definitions/javascript_steps.rb +8 -0
- data/features/step_definitions/page_level_actions_steps.rb +15 -0
- data/features/step_definitions/select_list_steps.rb +4 -0
- data/features/support/page.rb +3 -0
- data/lib/page-object.rb +8 -2
- data/lib/page-object/accessors.rb +37 -1
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +11 -1
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +10 -2
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +1 -1
- data/spec/page-object/accessors_spec.rb +38 -2
- data/spec/page-object/elements/element_spec.rb +4 -4
- data/spec/page-object/page-object_spec.rb +11 -0
- metadata +15 -15
data/.travis.yml
CHANGED
data/ChangeLog
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
=== Version 0.6.3 / 2012-3-1
|
2
|
+
* Enhancements
|
3
|
+
* Added #expected_title method to PageObject
|
4
|
+
* Added #expected_element method to PageObject
|
5
|
+
* Added #execute_script method to PageObject
|
6
|
+
* Updated to use selenium-webdriver 2.20.0
|
7
|
+
* Fixes
|
8
|
+
* Udates to the README - Thanks to p0deje and ivaravko
|
9
|
+
WARNING: This change breaks existing code
|
10
|
+
* Changed the generated getter for select_list to return the text instead of the value
|
11
|
+
|
1
12
|
=== Version 0.6.2 / 2012-2-12
|
2
13
|
* Enhancements
|
3
14
|
* Added #wait_for_ajax support for the jQuery framework
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[![Build Status](http://travis-ci.org/cheezy/page-object.png)](http://travis-ci.org/cheezy/page-object)
|
4
4
|
|
5
5
|
|
6
|
-
A simple gem that assists in creating flexible page objects for testing browser based
|
6
|
+
A simple gem that assists in creating flexible page objects for testing browser based applications. The goal is to facilitate creating abstraction layers in your tests to decouple the tests from the item they are testing and to provide a simple interface to the elements on a page. It works with both watir-webdriver and selenium-webdriver.
|
7
7
|
|
8
8
|
## Documentation
|
9
9
|
|
@@ -22,56 +22,70 @@ To read about the motivation for this gem please read this [blog entry](http://w
|
|
22
22
|
|
23
23
|
You define a new page object by including the PageObject module:
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
````ruby
|
26
|
+
class LoginPage
|
27
|
+
include PageObject
|
28
|
+
end
|
29
|
+
````
|
28
30
|
|
29
|
-
When you include this module numerous methods are added to your class that allow you to easily define your page.
|
31
|
+
When you include this module numerous methods are added to your class that allow you to easily define your page. For the login page you might add the following:
|
30
32
|
|
31
|
-
|
32
|
-
|
33
|
+
````ruby
|
34
|
+
class LoginPage
|
35
|
+
include PageObject
|
33
36
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
text_field(:username, :id => 'username')
|
38
|
+
text_field(:password, :id => 'password')
|
39
|
+
button(:login, :id => 'login')
|
40
|
+
end
|
41
|
+
````
|
42
|
+
|
43
|
+
Calling the _text_field_ and _button_ methods adds several methods to our page object that allow us to interact with the items on the page. To login using this page we could simply write the following code:
|
44
|
+
|
45
|
+
````ruby
|
46
|
+
login_page.username = 'cheezy'
|
47
|
+
login_page.password = 'secret'
|
48
|
+
login_page.login
|
49
|
+
````
|
44
50
|
|
45
|
-
Another approach might be to create higher level methods on our page object that hide the implementation details even further.
|
51
|
+
Another approach might be to create higher level methods on our page object that hide the implementation details even further. Our page object might look like this:
|
46
52
|
|
47
|
-
|
48
|
-
|
53
|
+
````ruby
|
54
|
+
class LoginPage
|
55
|
+
include PageObject
|
49
56
|
|
50
|
-
|
51
|
-
|
52
|
-
|
57
|
+
text_field(:username, :id => 'username')
|
58
|
+
text_field(:password, :id => 'password')
|
59
|
+
button(:login, :id => 'login')
|
53
60
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
61
|
+
def login_with(username, password)
|
62
|
+
self.username = username
|
63
|
+
self.password = password
|
64
|
+
login
|
65
|
+
end
|
66
|
+
end
|
67
|
+
````
|
60
68
|
|
61
69
|
and your usage of the page would become:
|
62
70
|
|
63
|
-
|
71
|
+
````ruby
|
72
|
+
login_page.login_with 'cheezy', 'secret'
|
73
|
+
````
|
64
74
|
|
65
75
|
### Creating your page object
|
66
|
-
page-object supports both [watir-webdriver](https://github.com/jarib/watir-webdriver) and [selenium-webdriver](http://seleniumhq.org/docs/03_webdriver.html).
|
76
|
+
page-object supports both [watir-webdriver](https://github.com/jarib/watir-webdriver) and [selenium-webdriver](http://seleniumhq.org/docs/03_webdriver.html). The one used will be determined by which driver you pass into the constructor of your page object. The page object can be create like this:
|
67
77
|
|
68
|
-
|
69
|
-
|
78
|
+
````ruby
|
79
|
+
browser = Watir::Browser.new :firefox
|
80
|
+
my_page_object = MyPageObject.new(browser)
|
81
|
+
````
|
70
82
|
|
71
83
|
or
|
72
84
|
|
73
|
-
|
74
|
-
|
85
|
+
````ruby
|
86
|
+
browser = Selenium::WebDriver.for :firefox
|
87
|
+
my_page_object = MyPageObject.new(browser)
|
88
|
+
````
|
75
89
|
|
76
90
|
## Known Issues
|
77
91
|
|
@@ -80,9 +94,9 @@ See [http://github.com/cheezy/page-object/issues](http://github.com/cheezy/page-
|
|
80
94
|
## Contribute
|
81
95
|
|
82
96
|
* Fork the project.
|
83
|
-
* Test drive your feature addition or bug fix.
|
97
|
+
* Test drive your feature addition or bug fix. Adding specs is important and I will not accept a pull request that does not have tests.
|
84
98
|
* Make sure you describe your new feature with a cucumber scenario.
|
85
|
-
* Make sure you provide RDoc comments for any new public method you add.
|
99
|
+
* Make sure you provide RDoc comments for any new public method you add. Remember, others will be using this gem.
|
86
100
|
* Commit, do not mess with Rakefile, version, or ChangeLog.
|
87
101
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
88
102
|
* Send me a pull request. Bonus points for topic branches.
|
data/features/javascript.feature
CHANGED
@@ -12,3 +12,7 @@ Feature: Handling javascript events
|
|
12
12
|
When I ask to compute "2 + 2"
|
13
13
|
Then I should be able to wait for the answer "4"
|
14
14
|
|
15
|
+
Scenario: Executing javascript in the browser
|
16
|
+
Given I am on the static elements page
|
17
|
+
Given I execute the javascript "return 2 + 2;"
|
18
|
+
Then I should get the answer "4"
|
@@ -14,6 +14,15 @@ Feature: Page level actions
|
|
14
14
|
|
15
15
|
Scenario: Getting the title from a web page
|
16
16
|
Then the page should have the title "Static Elements Page"
|
17
|
+
|
18
|
+
Scenario: Validating the page title
|
19
|
+
Then the page should have the expected title
|
20
|
+
|
21
|
+
Scenario: Validating the expected element
|
22
|
+
Then the page should have the expected element
|
23
|
+
|
24
|
+
Scenario: Validating that an expected element does not exist
|
25
|
+
Then the page should not have the expected element
|
17
26
|
|
18
27
|
Scenario: Waiting for something
|
19
28
|
Then I should be able to wait for a block to return true
|
@@ -48,4 +57,4 @@ Feature: Page level actions
|
|
48
57
|
Then the page should contain the text "Static Elements Page"
|
49
58
|
When I press the forward button
|
50
59
|
Then the page should contain the text "Success"
|
51
|
-
|
60
|
+
|
@@ -8,12 +8,13 @@ Feature: Select List
|
|
8
8
|
|
9
9
|
Scenario: Selecting an element on the select list
|
10
10
|
When I select "Test 2" from the select list
|
11
|
-
Then the current item should be "
|
11
|
+
Then the current item should be "Test 2"
|
12
12
|
|
13
13
|
Scenario Outline: Locating select lists on the Page
|
14
14
|
When I search for the select list by "<search_by>"
|
15
15
|
Then I should be able to select "Test 2"
|
16
|
-
And the value for the selected item should be "
|
16
|
+
And the value for the selected item should be "Test 2"
|
17
|
+
And the value for the option should be "option2"
|
17
18
|
|
18
19
|
Scenarios:
|
19
20
|
| search_by |
|
@@ -26,7 +27,8 @@ Feature: Select List
|
|
26
27
|
Scenario Outline: Locating a select list using multiple parameters
|
27
28
|
When I search for the select list by "<param1>" and "<param2>"
|
28
29
|
Then I should be able to select "Test 2"
|
29
|
-
And the value for the selected item should be "
|
30
|
+
And the value for the selected item should be "Test 2"
|
31
|
+
And the value for the option should be "option2"
|
30
32
|
|
31
33
|
Scenarios:
|
32
34
|
| param1 | param2 |
|
@@ -28,3 +28,11 @@ Then /^I should be able to wait for the answer "([^\"]*)"$/ do |answer|
|
|
28
28
|
@page.wait_for_ajax
|
29
29
|
@page.results.should == answer
|
30
30
|
end
|
31
|
+
|
32
|
+
Given /^I execute the javascript "([^\"]*)"$/ do |script|
|
33
|
+
@answer = @page.execute_script script
|
34
|
+
end
|
35
|
+
|
36
|
+
Then /^I should get the answer "([^\"]*)"$/ do |answer|
|
37
|
+
@answer.should == answer.to_i
|
38
|
+
end
|
@@ -78,3 +78,18 @@ When /^I press the forward button$/ do
|
|
78
78
|
@page.forward
|
79
79
|
end
|
80
80
|
|
81
|
+
Then /^the page should have the expected title$/ do
|
82
|
+
@page.should have_expected_title
|
83
|
+
end
|
84
|
+
|
85
|
+
Then /^the page should have the expected element$/ do
|
86
|
+
@page.should have_expected_element
|
87
|
+
end
|
88
|
+
|
89
|
+
Then /^the page should not have the expected element$/ do
|
90
|
+
class FakePage
|
91
|
+
include PageObject
|
92
|
+
expected_element :blah
|
93
|
+
end
|
94
|
+
FakePage.new(@browser).should_not have_expected_element
|
95
|
+
end
|
@@ -43,3 +43,7 @@ Then /^the select list should know that "([^\"]*)" is selected$/ do |text|
|
|
43
43
|
@page.sel_list_id_element.selected?(text).should be_true
|
44
44
|
end
|
45
45
|
|
46
|
+
Then /^the value for the option should be "([^\"]*)"$/ do |value|
|
47
|
+
element = @page.send "sel_list_#{@how}_element".to_sym
|
48
|
+
element.value.should == value
|
49
|
+
end
|
data/features/support/page.rb
CHANGED
data/lib/page-object.rb
CHANGED
@@ -66,8 +66,7 @@ module PageObject
|
|
66
66
|
|
67
67
|
#
|
68
68
|
# Set the javascript framework to use when determining number of
|
69
|
-
# ajax requests. Valid frameworks are :jquery
|
70
|
-
# :dojo
|
69
|
+
# ajax requests. Valid frameworks are :jquery and :prototype
|
71
70
|
#
|
72
71
|
def self.javascript_framework=(framework)
|
73
72
|
PageObject::JavascriptFrameworkFacade.framework = framework
|
@@ -209,6 +208,13 @@ module PageObject
|
|
209
208
|
def prompt(answer, frame=nil, &block)
|
210
209
|
platform.prompt(answer, frame, &block)
|
211
210
|
end
|
211
|
+
|
212
|
+
#
|
213
|
+
# Execute javascript on the browser
|
214
|
+
#
|
215
|
+
def execute_script(script)
|
216
|
+
platform.execute_script(script)
|
217
|
+
end
|
212
218
|
|
213
219
|
#
|
214
220
|
# Identify an element as existing within a frame or iframe. A frame parameter
|
@@ -21,6 +21,42 @@ module PageObject
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
#
|
25
|
+
# Creates a method that compares the expected_title of a page against the actual.
|
26
|
+
# @param [String] expected_title the literal expected title for the page
|
27
|
+
# @param [Regexp] expected_title the expected title pattern for the page
|
28
|
+
# @return [boolean]
|
29
|
+
# @raise An exception if expected_title does not match actual title
|
30
|
+
#
|
31
|
+
# @example Specify 'Google' as the expected title of a page
|
32
|
+
# expected_title "Google"
|
33
|
+
# page.has_expected_title?
|
34
|
+
#
|
35
|
+
def expected_title(expected_title)
|
36
|
+
define_method("has_expected_title?") do
|
37
|
+
has_expected_title = expected_title.kind_of?(Regexp) ? expected_title =~ title : expected_title == title
|
38
|
+
raise "Expected title '#{expected_title}' instead of '#{title}'" unless has_expected_title
|
39
|
+
has_expected_title
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# Creates a method that provides a way to initialize a page based upon an expected element.
|
45
|
+
# This is useful for pages that load dynamic content.
|
46
|
+
# @param [Symbol] the name given to the element in the declaration
|
47
|
+
# @param [optional, Integer] timeout default value is 5 seconds
|
48
|
+
# @return [boolean]
|
49
|
+
#
|
50
|
+
# @example Specify a text box named :address expected on the page within 10 seconds
|
51
|
+
# expected_element(:address, 10)
|
52
|
+
# page.has_expected_element?
|
53
|
+
#
|
54
|
+
def expected_element(element_name, timeout=5)
|
55
|
+
define_method("has_expected_element?") do
|
56
|
+
self.respond_to? "#{element_name}_element" and self.send("#{element_name}_element").when_present timeout
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
24
60
|
#
|
25
61
|
# Identify an element as existing within a frame or iframe. A frame parameter
|
26
62
|
# is passed to the block and must be passed to the other calls to PageObject.
|
@@ -172,7 +208,7 @@ module PageObject
|
|
172
208
|
|
173
209
|
#
|
174
210
|
# adds four methods - one to select an item in a drop-down,
|
175
|
-
# another to fetch the currently selected item, another
|
211
|
+
# another to fetch the currently selected item text, another
|
176
212
|
# to retrieve the select list element, and another to check the
|
177
213
|
# drop down's existence.
|
178
214
|
#
|
@@ -95,6 +95,14 @@ module PageObject
|
|
95
95
|
result && result.dup.each_key { |k| result[k.to_sym] = result.delete(k) }
|
96
96
|
result
|
97
97
|
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# platform method to execute javascript on the browser
|
101
|
+
# See PageObject#execute_script
|
102
|
+
#
|
103
|
+
def execute_script(script)
|
104
|
+
@browser.execute_script script
|
105
|
+
end
|
98
106
|
|
99
107
|
#
|
100
108
|
# platform method to handle attaching to a running window
|
@@ -266,7 +274,9 @@ module PageObject
|
|
266
274
|
#
|
267
275
|
def select_list_value_for(identifier)
|
268
276
|
process_selenium_call(identifier, Elements::SelectList, 'select') do |how, what|
|
269
|
-
@browser.find_element(how, what).
|
277
|
+
@browser.find_element(how, what).find_elements(:tag_name => 'option').each do |o|
|
278
|
+
return o.text if o.selected?
|
279
|
+
end
|
270
280
|
end
|
271
281
|
end
|
272
282
|
|
@@ -104,6 +104,14 @@ module PageObject
|
|
104
104
|
result && result.dup.each_key { |k| result[k.to_sym] = result.delete(k) }
|
105
105
|
result
|
106
106
|
end
|
107
|
+
|
108
|
+
#
|
109
|
+
# platform method to execute javascript on the browser
|
110
|
+
# See PageObject#execute_script
|
111
|
+
#
|
112
|
+
def execute_script(script)
|
113
|
+
@browser.wd.execute_script(script)
|
114
|
+
end
|
107
115
|
|
108
116
|
#
|
109
117
|
# platform method to handle attaching to a running window
|
@@ -256,8 +264,8 @@ module PageObject
|
|
256
264
|
# See PageObject::Accessors#select_list
|
257
265
|
#
|
258
266
|
def select_list_value_for(identifier)
|
259
|
-
process_watir_call("select_list(identifier).
|
260
|
-
identifier)
|
267
|
+
process_watir_call("select_list(identifier).options.each {|o| return o.text if o.selected?}",
|
268
|
+
Elements::SelectList, identifier)
|
261
269
|
end
|
262
270
|
|
263
271
|
#
|
data/lib/page-object/version.rb
CHANGED
data/page-object.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
22
|
s.add_dependency 'watir-webdriver', '>= 0.5.3'
|
23
|
-
s.add_dependency 'selenium-webdriver', '>= 2.
|
23
|
+
s.add_dependency 'selenium-webdriver', '>= 2.20.0'
|
24
24
|
|
25
25
|
s.add_development_dependency 'rspec', '>= 2.6.0'
|
26
26
|
s.add_development_dependency 'cucumber', '>= 1.1.0'
|
@@ -4,6 +4,8 @@ class AccessorsTestPageObject
|
|
4
4
|
include PageObject
|
5
5
|
|
6
6
|
page_url "http://apple.com"
|
7
|
+
expected_title "Expected Title"
|
8
|
+
expected_element :google_search
|
7
9
|
link(:google_search, :link => 'Google Search')
|
8
10
|
text_field(:first_name, :id => 'first_name')
|
9
11
|
hidden_field(:social_security_number, :id => 'ssn')
|
@@ -142,6 +144,34 @@ describe PageObject::Accessors do
|
|
142
144
|
end
|
143
145
|
end
|
144
146
|
|
147
|
+
describe "validating the page title" do
|
148
|
+
it "should validate the title" do
|
149
|
+
watir_browser.should_receive(:title).and_return("Expected Title")
|
150
|
+
watir_page_object.should have_expected_title
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should raise error when it does not have expected title" do
|
154
|
+
watir_browser.should_receive(:title).twice.and_return("Not Expected")
|
155
|
+
expect { watir_page_object.has_expected_title? }.to raise_error
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "validating the existence of an element" do
|
160
|
+
it "should validate an element exists" do
|
161
|
+
watir_page_object.should_receive(:google_search_element).and_return(watir_browser)
|
162
|
+
watir_browser.should_receive(:when_present).and_return(true)
|
163
|
+
watir_page_object.has_expected_element?
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should handle non-existent elements gracefully" do
|
167
|
+
class FakePage
|
168
|
+
include PageObject
|
169
|
+
expected_element :foo
|
170
|
+
end
|
171
|
+
FakePage.new(watir_browser).should_not have_expected_element
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
145
175
|
describe "link accessors" do
|
146
176
|
context "when called on a page object" do
|
147
177
|
it "should generate accessor methods" do
|
@@ -353,8 +383,11 @@ describe PageObject::Accessors do
|
|
353
383
|
|
354
384
|
context "Watir implementation" do
|
355
385
|
it "should get the current item from a select list" do
|
386
|
+
selected = "OH"
|
387
|
+
selected.should_receive(:selected?).and_return(selected)
|
388
|
+
selected.should_receive(:text).and_return("OH")
|
356
389
|
watir_browser.should_receive(:select_list).and_return watir_browser
|
357
|
-
watir_browser.should_receive(:
|
390
|
+
watir_browser.should_receive(:options).and_return([selected])
|
358
391
|
watir_page_object.state.should == "OH"
|
359
392
|
end
|
360
393
|
|
@@ -373,8 +406,11 @@ describe PageObject::Accessors do
|
|
373
406
|
|
374
407
|
context "Selenium implementation" do
|
375
408
|
it "should should get the current item from a select list" do
|
409
|
+
selected = "OH"
|
410
|
+
selected.should_receive(:selected?).and_return(selected)
|
411
|
+
selected.should_receive(:text).and_return("OH")
|
376
412
|
selenium_browser.should_receive(:find_element).and_return(selenium_browser)
|
377
|
-
selenium_browser.should_receive(:
|
413
|
+
selenium_browser.should_receive(:find_elements).and_return([selected])
|
378
414
|
selenium_page_object.state.should == "OH"
|
379
415
|
end
|
380
416
|
|
@@ -61,18 +61,18 @@ describe "Element" do
|
|
61
61
|
|
62
62
|
it "should build xpath when locating basic elements by name and class" do
|
63
63
|
all_basic_elements.each do |tag|
|
64
|
-
identifier = {:tag_name => tag, :
|
64
|
+
identifier = {:tag_name => tag, :class => 'bar', :name => 'foo'}
|
65
65
|
how, what = PageObject::Elements::Element.selenium_identifier_for identifier
|
66
66
|
how.should == :xpath
|
67
|
-
what.should == ".//#{tag}[@
|
67
|
+
what.should == ".//#{tag}[@class='bar' and @name='foo']"
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
71
|
it "should build xpath when locating input elements by name and class" do
|
72
72
|
all_input_elements.each do |type|
|
73
|
-
identifier = {:tag_name => 'input', :type => "#{type}", :
|
73
|
+
identifier = {:tag_name => 'input', :type => "#{type}", :class => 'bar', :name => 'foo'}
|
74
74
|
how, what = PageObject::Elements::Element.selenium_identifier_for identifier
|
75
|
-
what.should include ".//input[@type='#{type}' and @
|
75
|
+
what.should include ".//input[@type='#{type}' and @class='bar' and @name='foo']"
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -129,6 +129,12 @@ describe PageObject do
|
|
129
129
|
watir_page_object.prompt("blah") do
|
130
130
|
end
|
131
131
|
end
|
132
|
+
|
133
|
+
it "should execute javascript on the browser" do
|
134
|
+
watir_browser.should_receive(:wd).and_return(watir_browser)
|
135
|
+
watir_browser.should_receive(:execute_script).and_return("abc")
|
136
|
+
watir_page_object.execute_script("333").should == "abc"
|
137
|
+
end
|
132
138
|
|
133
139
|
it "should convert a modal popup to a window" do
|
134
140
|
watir_browser.should_receive(:execute_script)
|
@@ -236,6 +242,11 @@ describe PageObject do
|
|
236
242
|
selenium_page_object.modal_dialog {}
|
237
243
|
end
|
238
244
|
|
245
|
+
it "should execute javascript on the browser" do
|
246
|
+
selenium_browser.should_receive(:execute_script).and_return("abc")
|
247
|
+
selenium_page_object.execute_script("333").should == "abc"
|
248
|
+
end
|
249
|
+
|
239
250
|
it "should switch to a new window with a given title" do
|
240
251
|
selenium_browser.should_receive(:window_handles).and_return(["win1"])
|
241
252
|
selenium_browser.should_receive(:switch_to).twice.and_return(selenium_browser)
|
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.6.
|
4
|
+
version: 0.6.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: watir-webdriver
|
16
|
-
requirement: &
|
16
|
+
requirement: &70256300665480 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,21 +21,21 @@ dependencies:
|
|
21
21
|
version: 0.5.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70256300665480
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: selenium-webdriver
|
27
|
-
requirement: &
|
27
|
+
requirement: &70256300664920 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 2.
|
32
|
+
version: 2.20.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70256300664920
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70256300664440 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.6.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70256300664440
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: cucumber
|
49
|
-
requirement: &
|
49
|
+
requirement: &70256300663980 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.1.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70256300663980
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yard
|
60
|
-
requirement: &
|
60
|
+
requirement: &70256300663520 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.7.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70256300663520
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rack
|
71
|
-
requirement: &
|
71
|
+
requirement: &70256300696740 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '1.0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70256300696740
|
80
80
|
description: Page Object DSL that works with both Watir and Selenium
|
81
81
|
email:
|
82
82
|
- jeff.morgan@leandog.com
|