page-object 0.0.1

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.
Files changed (47) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +87 -0
  5. data/Rakefile +51 -0
  6. data/cucumber.yml +5 -0
  7. data/features/check_box.feature +39 -0
  8. data/features/html/static_elements.html +34 -0
  9. data/features/link.feature +42 -0
  10. data/features/page_level_actions.feature +19 -0
  11. data/features/radio_button.feature +40 -0
  12. data/features/select_list.feature +40 -0
  13. data/features/step_definitions/accessor_steps.rb +88 -0
  14. data/features/step_definitions/element_steps.rb +28 -0
  15. data/features/step_definitions/page_level_actions_steps.rb +12 -0
  16. data/features/step_definitions/page_traversal_steps.rb +5 -0
  17. data/features/support/env.rb +18 -0
  18. data/features/support/page.rb +45 -0
  19. data/features/support/url_helper.rb +16 -0
  20. data/features/text_field.feature +39 -0
  21. data/lib/page-object.rb +52 -0
  22. data/lib/page-object/accessors.rb +171 -0
  23. data/lib/page-object/elements.rb +8 -0
  24. data/lib/page-object/elements/button.rb +15 -0
  25. data/lib/page-object/elements/check_box.rb +15 -0
  26. data/lib/page-object/elements/element.rb +52 -0
  27. data/lib/page-object/elements/link.rb +34 -0
  28. data/lib/page-object/elements/radio_button.rb +15 -0
  29. data/lib/page-object/elements/select_list.rb +21 -0
  30. data/lib/page-object/elements/text_field.rb +33 -0
  31. data/lib/page-object/selenium_element.rb +12 -0
  32. data/lib/page-object/selenium_page_object.rb +190 -0
  33. data/lib/page-object/version.rb +3 -0
  34. data/lib/page-object/watir_element.rb +12 -0
  35. data/lib/page-object/watir_page_object.rb +190 -0
  36. data/page-object.gemspec +29 -0
  37. data/spec/page-object/accessors_spec.rb +297 -0
  38. data/spec/page-object/elements/button_spec.rb +23 -0
  39. data/spec/page-object/elements/check_box_spec.rb +21 -0
  40. data/spec/page-object/elements/element_spec.rb +54 -0
  41. data/spec/page-object/elements/link_spec.rb +34 -0
  42. data/spec/page-object/elements/radio_button_spec.rb +21 -0
  43. data/spec/page-object/elements/select_list_spec.rb +22 -0
  44. data/spec/page-object/elements/text_field_spec.rb +32 -0
  45. data/spec/page-object/page-object_spec.rb +78 -0
  46. data/spec/spec_helper.rb +31 -0
  47. metadata +179 -0
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::RadioButton do
5
+ let(:radiobutton) { PageObject::Elements::RadioButton }
6
+
7
+ describe "when mapping how to find an element" do
8
+ it "should map watir types to same" do
9
+ [:class, :id, :index, :name, :xpath].each do |t|
10
+ identifier = radiobutton.watir_identifier_for t => 'value'
11
+ identifier.keys.first.should == t
12
+ end
13
+ end
14
+ it "should map selenium types to same" do
15
+ [:class, :id, :name, :xpath].each do |t|
16
+ key, value = radiobutton.selenium_identifier_for t => 'value'
17
+ key.should == t
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::SelectList do
5
+ let(:selectlist) { PageObject::Elements::SelectList }
6
+
7
+ describe "when mapping how to find an element" do
8
+ it "should map watir types to same" do
9
+ [:class, :id, :index, :name, :text, :value, :xpath].each do |t|
10
+ identifier = selectlist.watir_identifier_for t => 'value'
11
+ identifier.keys.first.should == t
12
+ end
13
+ end
14
+
15
+ it "should map selenium types to same" do
16
+ [:class, :id, :name, :xpath].each do |t|
17
+ key, value = selectlist.selenium_identifier_for t => 'value'
18
+ key.should == t
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::TextField do
5
+ let(:textfield) { PageObject::Elements::TextField }
6
+
7
+ describe "when mapping how to find an element" do
8
+ it "should map watir types to same" do
9
+ [:class, :id, :index, :name, :tag_name, :text, :value, :xpath].each do |t|
10
+ identifier = textfield.watir_identifier_for t => 'value'
11
+ identifier.keys.first.should == t
12
+ end
13
+ end
14
+
15
+ it "should map selenium types to watir" do
16
+ identifier = textfield.watir_identifier_for :css => 'value'
17
+ identifier.keys.first.should == :tag_name
18
+ end
19
+
20
+ it "should map selenium types to same" do
21
+ [:class, :css, :id, :name, :xpath].each do |t|
22
+ key, value = textfield.selenium_identifier_for t => 'value'
23
+ key.should == t
24
+ end
25
+ end
26
+
27
+ it "should map watir types to selenium" do
28
+ key, value = textfield.selenium_identifier_for :tag_name => 'value'
29
+ key.should == :css
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ class TestPageObject
4
+ include PageObject
5
+ end
6
+
7
+ describe PageObject do
8
+ let(:watir_browser) { mock_watir_browser }
9
+ let(:selenium_browser) { mock_selenium_browser }
10
+ let(:watir_page_object) { TestPageObject.new(watir_browser) }
11
+ let(:selenium_page_object) { TestPageObject.new(selenium_browser) }
12
+
13
+ context "when created with a watir-webdriver browser" do
14
+ it "should include the WatirPageObject module" do
15
+ watir_page_object.platform.should be_kind_of PageObject::WatirPageObject
16
+ end
17
+ end
18
+
19
+ context "when created with a selenium browser" do
20
+ it "should include the SeleniumPageObject module" do
21
+ selenium_page_object.platform.should be_kind_of PageObject::SeleniumPageObject
22
+ end
23
+ end
24
+
25
+ context "when created with an object we do not understand" do
26
+ it "should throw an error" do
27
+ expect {
28
+ TestPageObject.new("blah")
29
+ }.to raise_error
30
+ end
31
+ end
32
+
33
+ describe "page level functionality" do
34
+ context "when using WatirPageObject" do
35
+ it "should display the page text" do
36
+ watir_browser.should_receive(:text).and_return("browser text")
37
+ watir_page_object.text.should == "browser text"
38
+ end
39
+
40
+ it "should display the html of the page" do
41
+ watir_browser.should_receive(:html).and_return("<html>Some Sample HTML</html>")
42
+ watir_page_object.html.should == "<html>Some Sample HTML</html>"
43
+ end
44
+
45
+ it "should display the title of the page" do
46
+ watir_browser.should_receive(:title).and_return("I am the title of a page")
47
+ watir_page_object.title.should == "I am the title of a page"
48
+ end
49
+
50
+ it "should be able to navigate to a page" do
51
+ watir_browser.should_receive(:goto).with("cheezyworld.com")
52
+ watir_page_object.navigate_to("cheezyworld.com")
53
+ end
54
+ end
55
+
56
+ context "when using SeleniumPageObject" do
57
+ it "should display the page text" do
58
+ selenium_browser.stub_chain(:find_element, :text).and_return("browser text")
59
+ selenium_page_object.text.should == "browser text"
60
+ end
61
+
62
+ it "should display the html of the page" do
63
+ selenium_browser.should_receive(:page_source).and_return("<html>Some Sample HTML</html>")
64
+ selenium_page_object.html.should == "<html>Some Sample HTML</html>"
65
+ end
66
+
67
+ it "should display the title of the page" do
68
+ selenium_browser.should_receive(:title).and_return("I am the title of a page")
69
+ selenium_page_object.title.should == "I am the title of a page"
70
+ end
71
+
72
+ it "should be able to navigate to a page" do
73
+ selenium_browser.stub_chain(:navigate, :to).with('cheezyworld.com')
74
+ selenium_page_object.navigate_to('cheezyworld.com')
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
+
5
+ if ENV['coverage']
6
+ raise "simplecov only works on Ruby 1.9" unless RUBY_VERSION =~ /^1\.9/
7
+
8
+ require 'simplecov'
9
+ SimpleCov.start { add_filter "spec/" }
10
+ end
11
+
12
+ require 'rspec'
13
+ require 'watir-webdriver'
14
+ require 'selenium-webdriver'
15
+
16
+ require 'page-object'
17
+
18
+ def mock_watir_browser
19
+ watir_browser = double('watir')
20
+ watir_browser.should_receive(:is_a?).with(Watir::Browser).and_return(true)
21
+ watir_browser
22
+ end
23
+
24
+
25
+ def mock_selenium_browser
26
+ selenium_browser = double('selenium')
27
+ selenium_browser.should_receive(:is_a?).with(Watir::Browser).and_return(false)
28
+ selenium_browser.should_receive(:is_a?).with(Selenium::WebDriver::Driver).and_return(true)
29
+ selenium_browser
30
+ end
31
+
metadata ADDED
@@ -0,0 +1,179 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: page-object
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Jeff Morgan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-22 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: watir-webdriver
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.2.3
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: selenium-webdriver
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 0.2.0
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.5.0
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: cucumber
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 0.10.2
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: yard
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.6.8
69
+ type: :development
70
+ version_requirements: *id005
71
+ description: Page Object DSL that works with both Watir and Selenium
72
+ email:
73
+ - jeff.morgan@leandog.com
74
+ executables: []
75
+
76
+ extensions: []
77
+
78
+ extra_rdoc_files: []
79
+
80
+ files:
81
+ - .gitignore
82
+ - Gemfile
83
+ - LICENSE
84
+ - README.md
85
+ - Rakefile
86
+ - cucumber.yml
87
+ - features/check_box.feature
88
+ - features/html/static_elements.html
89
+ - features/link.feature
90
+ - features/page_level_actions.feature
91
+ - features/radio_button.feature
92
+ - features/select_list.feature
93
+ - features/step_definitions/accessor_steps.rb
94
+ - features/step_definitions/element_steps.rb
95
+ - features/step_definitions/page_level_actions_steps.rb
96
+ - features/step_definitions/page_traversal_steps.rb
97
+ - features/support/env.rb
98
+ - features/support/page.rb
99
+ - features/support/url_helper.rb
100
+ - features/text_field.feature
101
+ - lib/page-object.rb
102
+ - lib/page-object/accessors.rb
103
+ - lib/page-object/elements.rb
104
+ - lib/page-object/elements/button.rb
105
+ - lib/page-object/elements/check_box.rb
106
+ - lib/page-object/elements/element.rb
107
+ - lib/page-object/elements/link.rb
108
+ - lib/page-object/elements/radio_button.rb
109
+ - lib/page-object/elements/select_list.rb
110
+ - lib/page-object/elements/text_field.rb
111
+ - lib/page-object/selenium_element.rb
112
+ - lib/page-object/selenium_page_object.rb
113
+ - lib/page-object/version.rb
114
+ - lib/page-object/watir_element.rb
115
+ - lib/page-object/watir_page_object.rb
116
+ - page-object.gemspec
117
+ - spec/page-object/accessors_spec.rb
118
+ - spec/page-object/elements/button_spec.rb
119
+ - spec/page-object/elements/check_box_spec.rb
120
+ - spec/page-object/elements/element_spec.rb
121
+ - spec/page-object/elements/link_spec.rb
122
+ - spec/page-object/elements/radio_button_spec.rb
123
+ - spec/page-object/elements/select_list_spec.rb
124
+ - spec/page-object/elements/text_field_spec.rb
125
+ - spec/page-object/page-object_spec.rb
126
+ - spec/spec_helper.rb
127
+ has_rdoc: true
128
+ homepage: http://github.com/cheezy/page-object
129
+ licenses: []
130
+
131
+ post_install_message:
132
+ rdoc_options: []
133
+
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: "0"
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: "0"
148
+ requirements: []
149
+
150
+ rubyforge_project: page-object
151
+ rubygems_version: 1.6.2
152
+ signing_key:
153
+ specification_version: 3
154
+ summary: Page Object DSL for browser testing
155
+ test_files:
156
+ - features/check_box.feature
157
+ - features/html/static_elements.html
158
+ - features/link.feature
159
+ - features/page_level_actions.feature
160
+ - features/radio_button.feature
161
+ - features/select_list.feature
162
+ - features/step_definitions/accessor_steps.rb
163
+ - features/step_definitions/element_steps.rb
164
+ - features/step_definitions/page_level_actions_steps.rb
165
+ - features/step_definitions/page_traversal_steps.rb
166
+ - features/support/env.rb
167
+ - features/support/page.rb
168
+ - features/support/url_helper.rb
169
+ - features/text_field.feature
170
+ - spec/page-object/accessors_spec.rb
171
+ - spec/page-object/elements/button_spec.rb
172
+ - spec/page-object/elements/check_box_spec.rb
173
+ - spec/page-object/elements/element_spec.rb
174
+ - spec/page-object/elements/link_spec.rb
175
+ - spec/page-object/elements/radio_button_spec.rb
176
+ - spec/page-object/elements/select_list_spec.rb
177
+ - spec/page-object/elements/text_field_spec.rb
178
+ - spec/page-object/page-object_spec.rb
179
+ - spec/spec_helper.rb