meeane-page-object 0.1.8

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 (262) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.rspec +2 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +10 -0
  7. data/ChangeLog +790 -0
  8. data/Gemfile +13 -0
  9. data/Guardfile +20 -0
  10. data/LICENSE +20 -0
  11. data/README.md +141 -0
  12. data/Rakefile +35 -0
  13. data/cucumber.yml +10 -0
  14. data/features/area.feature +35 -0
  15. data/features/async.feature +30 -0
  16. data/features/audio.feature +68 -0
  17. data/features/button.feature +87 -0
  18. data/features/canvas.feature +37 -0
  19. data/features/check_box.feature +55 -0
  20. data/features/div.feature +45 -0
  21. data/features/element.feature +322 -0
  22. data/features/file_field.feature +40 -0
  23. data/features/form.feature +43 -0
  24. data/features/frames.feature +75 -0
  25. data/features/generic_elements.feature +29 -0
  26. data/features/gxt_table_extension.feature +24 -0
  27. data/features/headings.feature +97 -0
  28. data/features/hidden_field.feature +45 -0
  29. data/features/html/04-Death_Becomes_Fur.mp4 +0 -0
  30. data/features/html/04-Death_Becomes_Fur.oga +0 -0
  31. data/features/html/async.html +36 -0
  32. data/features/html/double_click.html +13 -0
  33. data/features/html/failure.html +8 -0
  34. data/features/html/frame_1.html +18 -0
  35. data/features/html/frame_2.html +16 -0
  36. data/features/html/frame_3.html +14 -0
  37. data/features/html/frames.html +12 -0
  38. data/features/html/hover.html +12 -0
  39. data/features/html/iframes.html +12 -0
  40. data/features/html/images/circle.png +0 -0
  41. data/features/html/images/img_pulpit.jpg +0 -0
  42. data/features/html/images/submit.gif +0 -0
  43. data/features/html/indexed_property.html +52 -0
  44. data/features/html/modal.html +17 -0
  45. data/features/html/modal_1.html +38 -0
  46. data/features/html/modal_2.html +27 -0
  47. data/features/html/movie.mp4 +0 -0
  48. data/features/html/movie.ogg +0 -0
  49. data/features/html/multi_elements.html +144 -0
  50. data/features/html/nested_elements.html +77 -0
  51. data/features/html/nested_frame_1.html +1 -0
  52. data/features/html/nested_frame_2.html +11 -0
  53. data/features/html/nested_frame_3.html +14 -0
  54. data/features/html/nested_frames.html +10 -0
  55. data/features/html/planets.gif +0 -0
  56. data/features/html/static_elements.html +206 -0
  57. data/features/html/success.html +8 -0
  58. data/features/html/sun.gif +0 -0
  59. data/features/html/sun.html +7 -0
  60. data/features/image.feature +50 -0
  61. data/features/indexed_property.feature +98 -0
  62. data/features/javascript.feature +28 -0
  63. data/features/label.feature +46 -0
  64. data/features/link.feature +52 -0
  65. data/features/list_item.feature +36 -0
  66. data/features/modal_dialog.feature +15 -0
  67. data/features/multi_elements.feature +486 -0
  68. data/features/nested_elements.feature +117 -0
  69. data/features/ordered_list.feature +56 -0
  70. data/features/page_level_actions.feature +90 -0
  71. data/features/paragraph.feature +35 -0
  72. data/features/radio_button.feature +58 -0
  73. data/features/radio_button_group.feature +29 -0
  74. data/features/sample-app/public/jquery-1.3.2.js +4376 -0
  75. data/features/sample-app/public/jquery.html +30 -0
  76. data/features/sample-app/public/prototype-1.6.0.3.js +4320 -0
  77. data/features/sample-app/public/prototype.html +35 -0
  78. data/features/sample-app/sample_app.rb +35 -0
  79. data/features/select_list.feature +86 -0
  80. data/features/span.feature +37 -0
  81. data/features/step_definitions/accessor_steps.rb +60 -0
  82. data/features/step_definitions/area_steps.rb +19 -0
  83. data/features/step_definitions/async_steps.rb +83 -0
  84. data/features/step_definitions/audio_steps.rb +27 -0
  85. data/features/step_definitions/button_steps.rb +43 -0
  86. data/features/step_definitions/canvas_steps.rb +15 -0
  87. data/features/step_definitions/check_box_steps.rb +35 -0
  88. data/features/step_definitions/div_steps.rb +19 -0
  89. data/features/step_definitions/element_steps.rb +266 -0
  90. data/features/step_definitions/file_field_steps.rb +19 -0
  91. data/features/step_definitions/form_steps.rb +19 -0
  92. data/features/step_definitions/frames_steps.rb +159 -0
  93. data/features/step_definitions/generic_element_steps.rb +31 -0
  94. data/features/step_definitions/gxt_table_steps.rb +58 -0
  95. data/features/step_definitions/headings_steps.rb +12 -0
  96. data/features/step_definitions/hidden_field_steps.rb +27 -0
  97. data/features/step_definitions/image_steps.rb +27 -0
  98. data/features/step_definitions/indexed_property_steps.rb +129 -0
  99. data/features/step_definitions/javascript_steps.rb +53 -0
  100. data/features/step_definitions/label_steps.rb +19 -0
  101. data/features/step_definitions/link_steps.rb +40 -0
  102. data/features/step_definitions/list_item_steps.rb +19 -0
  103. data/features/step_definitions/modal_dialog_steps.rb +62 -0
  104. data/features/step_definitions/multi_elements_steps.rb +528 -0
  105. data/features/step_definitions/nested_elements_steps.rb +212 -0
  106. data/features/step_definitions/ordered_list_steps.rb +23 -0
  107. data/features/step_definitions/page_level_actions_steps.rb +135 -0
  108. data/features/step_definitions/page_traversal_steps.rb +4 -0
  109. data/features/step_definitions/paragraph_steps.rb +28 -0
  110. data/features/step_definitions/radio_button_group_steps.rb +36 -0
  111. data/features/step_definitions/radio_button_steps.rb +27 -0
  112. data/features/step_definitions/select_list_steps.rb +65 -0
  113. data/features/step_definitions/span_steps.rb +19 -0
  114. data/features/step_definitions/table_cell_steps.rb +15 -0
  115. data/features/step_definitions/table_steps.rb +66 -0
  116. data/features/step_definitions/text_area_steps.rb +35 -0
  117. data/features/step_definitions/text_field_steps.rb +35 -0
  118. data/features/step_definitions/unordered_list_steps.rb +23 -0
  119. data/features/step_definitions/video_steps.rb +45 -0
  120. data/features/support/ajax_text_environment.rb +26 -0
  121. data/features/support/env.rb +8 -0
  122. data/features/support/hooks.rb +8 -0
  123. data/features/support/page.rb +364 -0
  124. data/features/support/persistent_browser.rb +70 -0
  125. data/features/support/targets/firefox14_osx.rb +6 -0
  126. data/features/support/targets/firefox14_windows7.rb +6 -0
  127. data/features/support/url_helper.rb +57 -0
  128. data/features/table.feature +114 -0
  129. data/features/table_cell.feature +45 -0
  130. data/features/text_area.feature +51 -0
  131. data/features/text_field.feature +70 -0
  132. data/features/unordered_list.feature +56 -0
  133. data/features/video.feature +73 -0
  134. data/lib/page-object/accessors.rb +1313 -0
  135. data/lib/page-object/core_ext/string.rb +5 -0
  136. data/lib/page-object/element_locators.rb +21 -0
  137. data/lib/page-object/elements/area.rb +31 -0
  138. data/lib/page-object/elements/audio.rb +9 -0
  139. data/lib/page-object/elements/button.rb +35 -0
  140. data/lib/page-object/elements/canvas.rb +23 -0
  141. data/lib/page-object/elements/check_box.rb +37 -0
  142. data/lib/page-object/elements/div.rb +19 -0
  143. data/lib/page-object/elements/element.rb +226 -0
  144. data/lib/page-object/elements/file_field.rb +38 -0
  145. data/lib/page-object/elements/form.rb +36 -0
  146. data/lib/page-object/elements/heading.rb +15 -0
  147. data/lib/page-object/elements/hidden_field.rb +22 -0
  148. data/lib/page-object/elements/image.rb +36 -0
  149. data/lib/page-object/elements/label.rb +36 -0
  150. data/lib/page-object/elements/link.rb +46 -0
  151. data/lib/page-object/elements/list_item.rb +19 -0
  152. data/lib/page-object/elements/media.rb +45 -0
  153. data/lib/page-object/elements/option.rb +10 -0
  154. data/lib/page-object/elements/ordered_list.rb +50 -0
  155. data/lib/page-object/elements/paragraph.rb +9 -0
  156. data/lib/page-object/elements/radio_button.rb +37 -0
  157. data/lib/page-object/elements/select_list.rb +42 -0
  158. data/lib/page-object/elements/span.rb +19 -0
  159. data/lib/page-object/elements/table.rb +68 -0
  160. data/lib/page-object/elements/table_cell.rb +28 -0
  161. data/lib/page-object/elements/table_row.rb +50 -0
  162. data/lib/page-object/elements/text_area.rb +38 -0
  163. data/lib/page-object/elements/text_field.rb +42 -0
  164. data/lib/page-object/elements/unordered_list.rb +51 -0
  165. data/lib/page-object/elements/video.rb +18 -0
  166. data/lib/page-object/elements.rb +59 -0
  167. data/lib/page-object/indexed_properties.rb +36 -0
  168. data/lib/page-object/javascript/jquery.rb +14 -0
  169. data/lib/page-object/javascript/prototype.rb +14 -0
  170. data/lib/page-object/javascript/yui.rb +19 -0
  171. data/lib/page-object/javascript_framework_facade.rb +78 -0
  172. data/lib/page-object/loads_platform.rb +26 -0
  173. data/lib/page-object/locator_generator.rb +129 -0
  174. data/lib/page-object/nested_elements.rb +17 -0
  175. data/lib/page-object/page_factory.rb +108 -0
  176. data/lib/page-object/page_populator.rb +92 -0
  177. data/lib/page-object/platforms/selenium_webdriver/button.rb +15 -0
  178. data/lib/page-object/platforms/selenium_webdriver/check_box.rb +29 -0
  179. data/lib/page-object/platforms/selenium_webdriver/element.rb +291 -0
  180. data/lib/page-object/platforms/selenium_webdriver/file_field.rb +16 -0
  181. data/lib/page-object/platforms/selenium_webdriver/form.rb +16 -0
  182. data/lib/page-object/platforms/selenium_webdriver/image.rb +28 -0
  183. data/lib/page-object/platforms/selenium_webdriver/label.rb +17 -0
  184. data/lib/page-object/platforms/selenium_webdriver/link.rb +23 -0
  185. data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +39 -0
  186. data/lib/page-object/platforms/selenium_webdriver/page_object.rb +1136 -0
  187. data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +22 -0
  188. data/lib/page-object/platforms/selenium_webdriver/select_list.rb +93 -0
  189. data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +42 -0
  190. data/lib/page-object/platforms/selenium_webdriver/table.rb +42 -0
  191. data/lib/page-object/platforms/selenium_webdriver/table_row.rb +43 -0
  192. data/lib/page-object/platforms/selenium_webdriver/text_area.rb +17 -0
  193. data/lib/page-object/platforms/selenium_webdriver/text_field.rb +17 -0
  194. data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +39 -0
  195. data/lib/page-object/platforms/selenium_webdriver.rb +18 -0
  196. data/lib/page-object/platforms/watir_webdriver/check_box.rb +29 -0
  197. data/lib/page-object/platforms/watir_webdriver/element.rb +249 -0
  198. data/lib/page-object/platforms/watir_webdriver/file_field.rb +16 -0
  199. data/lib/page-object/platforms/watir_webdriver/form.rb +16 -0
  200. data/lib/page-object/platforms/watir_webdriver/image.rb +22 -0
  201. data/lib/page-object/platforms/watir_webdriver/label.rb +17 -0
  202. data/lib/page-object/platforms/watir_webdriver/link.rb +15 -0
  203. data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +35 -0
  204. data/lib/page-object/platforms/watir_webdriver/page_object.rb +1029 -0
  205. data/lib/page-object/platforms/watir_webdriver/radio_button.rb +22 -0
  206. data/lib/page-object/platforms/watir_webdriver/select_list.rb +74 -0
  207. data/lib/page-object/platforms/watir_webdriver/table.rb +38 -0
  208. data/lib/page-object/platforms/watir_webdriver/table_row.rb +37 -0
  209. data/lib/page-object/platforms/watir_webdriver/text_area.rb +23 -0
  210. data/lib/page-object/platforms/watir_webdriver/text_field.rb +16 -0
  211. data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +36 -0
  212. data/lib/page-object/platforms/watir_webdriver.rb +18 -0
  213. data/lib/page-object/platforms.rb +18 -0
  214. data/lib/page-object/version.rb +4 -0
  215. data/lib/page-object/widgets.rb +133 -0
  216. data/lib/page-object.rb +408 -0
  217. data/meeane-page-object.gemspec +32 -0
  218. data/pageobject.gems +1 -0
  219. data/spec/page-object/element_locators_spec.rb +1065 -0
  220. data/spec/page-object/elements/area_spec.rb +45 -0
  221. data/spec/page-object/elements/button_spec.rb +50 -0
  222. data/spec/page-object/elements/canvas_spec.rb +40 -0
  223. data/spec/page-object/elements/check_box_spec.rb +49 -0
  224. data/spec/page-object/elements/div_spec.rb +28 -0
  225. data/spec/page-object/elements/element_spec.rb +114 -0
  226. data/spec/page-object/elements/file_field_spec.rb +39 -0
  227. data/spec/page-object/elements/form_spec.rb +28 -0
  228. data/spec/page-object/elements/heading_spec.rb +48 -0
  229. data/spec/page-object/elements/hidden_field_spec.rb +28 -0
  230. data/spec/page-object/elements/image_spec.rb +66 -0
  231. data/spec/page-object/elements/label_spec.rb +29 -0
  232. data/spec/page-object/elements/link_spec.rb +49 -0
  233. data/spec/page-object/elements/list_item_spec.rb +28 -0
  234. data/spec/page-object/elements/nested_element_spec.rb +254 -0
  235. data/spec/page-object/elements/option_spec.rb +11 -0
  236. data/spec/page-object/elements/ordered_list_spec.rb +94 -0
  237. data/spec/page-object/elements/paragraph_spec.rb +28 -0
  238. data/spec/page-object/elements/select_list_spec.rb +142 -0
  239. data/spec/page-object/elements/selenium/radio_button_spec.rb +44 -0
  240. data/spec/page-object/elements/selenium/text_field_spec.rb +49 -0
  241. data/spec/page-object/elements/selenium_element_spec.rb +172 -0
  242. data/spec/page-object/elements/span_spec.rb +26 -0
  243. data/spec/page-object/elements/table_cell_spec.rb +21 -0
  244. data/spec/page-object/elements/table_row_spec.rb +70 -0
  245. data/spec/page-object/elements/table_spec.rb +98 -0
  246. data/spec/page-object/elements/text_area_spec.rb +39 -0
  247. data/spec/page-object/elements/unordered_list_spec.rb +95 -0
  248. data/spec/page-object/elements/watir_element_spec.rb +142 -0
  249. data/spec/page-object/javascript_framework_facade_spec.rb +61 -0
  250. data/spec/page-object/loads_platform_spec.rb +53 -0
  251. data/spec/page-object/page-object_spec.rb +405 -0
  252. data/spec/page-object/page_factory_spec.rb +256 -0
  253. data/spec/page-object/page_populator_spec.rb +122 -0
  254. data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +68 -0
  255. data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
  256. data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +29 -0
  257. data/spec/page-object/platforms/watir_webdriver_spec.rb +9 -0
  258. data/spec/page-object/selenium_accessors_spec.rb +589 -0
  259. data/spec/page-object/watir_accessors_spec.rb +1107 -0
  260. data/spec/page-object/widget_spec.rb +226 -0
  261. data/spec/spec_helper.rb +44 -0
  262. metadata +404 -0
@@ -0,0 +1,589 @@
1
+ require 'spec_helper'
2
+
3
+ class SeleniumAccessorsTestPageObject
4
+ include PageObject
5
+
6
+ page_url "http://apple.com"
7
+ expected_title "Expected Title"
8
+ expected_element :google_search
9
+ link(:google_search, :link => 'Google Search')
10
+ text_field(:first_name, :id => 'first_name')
11
+ hidden_field(:social_security_number, :id => 'ssn')
12
+ text_area(:address, :id => 'address')
13
+ select_list(:state, :id => 'state')
14
+ checkbox(:active, :id => 'is_active_id')
15
+ radio_button(:first, :id => 'first_choice')
16
+ button(:click_me, :id => 'button_submit')
17
+ div(:message, :id => 'message_id')
18
+ table(:cart, :id => 'cart_id')
19
+ cell(:total, :id => 'total')
20
+ span(:alert_span, :id => 'alert_id')
21
+ image(:logo, :id => 'logo')
22
+ form(:login, :id => 'login')
23
+ list_item(:item_one, :id => 'one')
24
+ unordered_list(:menu, :id => 'main_menu')
25
+ ordered_list(:top_five, :id => 'top')
26
+ h1(:heading1, :id => 'main_heading')
27
+ h2(:heading2, :id => 'main_heading')
28
+ h3(:heading3, :id => 'main_heading')
29
+ h4(:heading4, :id => 'main_heading')
30
+ h5(:heading5, :id => 'main_heading')
31
+ h6(:heading6, :id => 'main_heading')
32
+ paragraph(:first_para, :id => 'first')
33
+ file_field(:upload_me, :id => 'the_file')
34
+ area(:img_area, :id => 'area')
35
+ canvas(:my_canvas, :id => 'canvas')
36
+ audio(:acdc, :id => 'audio_id')
37
+ video(:movie, :id => 'movie_id')
38
+ end
39
+
40
+ class SeleniumBlockPageObject
41
+ include PageObject
42
+
43
+ attr_reader :value
44
+
45
+ text_field :first_name do |element|
46
+ "text_field"
47
+ end
48
+ hidden_field :secret do |element|
49
+ "hidden_field"
50
+ end
51
+ text_area :address do |element|
52
+ "text_area"
53
+ end
54
+ select_list :state do |element|
55
+ "select_list"
56
+ end
57
+ link :continue do |element|
58
+ "link"
59
+ end
60
+ checkbox :active do |element|
61
+ "checkbox"
62
+ end
63
+ radio_button :first do |element|
64
+ "radio_button"
65
+ end
66
+ button :click_me do |element|
67
+ "button"
68
+ end
69
+ div :footer do |element|
70
+ "div"
71
+ end
72
+ span :alert_span do |element|
73
+ "span"
74
+ end
75
+ table :cart do |element|
76
+ "table"
77
+ end
78
+ cell :total do |element|
79
+ "cell"
80
+ end
81
+ image :logo do |element|
82
+ "image"
83
+ end
84
+ form :login do |element|
85
+ "form"
86
+ end
87
+ list_item :item_one do |element|
88
+ "list_item"
89
+ end
90
+ unordered_list :menu do |element|
91
+ "unordered_list"
92
+ end
93
+ ordered_list :top_five do |element|
94
+ "ordered_list"
95
+ end
96
+ h1 :heading1 do |element|
97
+ "h1"
98
+ end
99
+ h2 :heading2 do |element|
100
+ "h2"
101
+ end
102
+ h3 :heading3 do |element|
103
+ "h3"
104
+ end
105
+ h4 :heading4 do |element|
106
+ "h4"
107
+ end
108
+ h5 :heading5 do |element|
109
+ "h5"
110
+ end
111
+ h6 :heading6 do |element|
112
+ "h6"
113
+ end
114
+ paragraph :first_para do |element|
115
+ "p"
116
+ end
117
+ file_field :a_file do |element|
118
+ "file_field"
119
+ end
120
+ area :img_area do |element|
121
+ "area"
122
+ end
123
+ canvas :my_canvas do |element|
124
+ "canvas"
125
+ end
126
+ audio :acdc do |element|
127
+ 'audio'
128
+ end
129
+ video :movie do |element|
130
+ 'video'
131
+ end
132
+ end
133
+
134
+ describe PageObject::Accessors do
135
+ let(:selenium_browser) { mock_selenium_browser }
136
+ let(:selenium_page_object) { SeleniumAccessorsTestPageObject.new(selenium_browser) }
137
+ let(:block_page_object) { SeleniumBlockPageObject.new(selenium_browser) }
138
+
139
+ before(:each) do
140
+ selenium_browser.stub(:switch_to).and_return(selenium_browser)
141
+ selenium_browser.stub(:default_content)
142
+ end
143
+
144
+ describe "link accessors" do
145
+ it "should select a link" do
146
+ selenium_browser.stub_chain(:find_element, :click)
147
+ selenium_page_object.google_search
148
+ end
149
+
150
+ it "should return a link element" do
151
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
152
+ element = selenium_page_object.google_search_element
153
+ element.should be_instance_of PageObject::Elements::Link
154
+ end
155
+ end
156
+
157
+
158
+ describe "text_field accessors" do
159
+ it "should get the text from the text field element" do
160
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
161
+ selenium_browser.should_receive(:attribute).with('value').and_return('Katie')
162
+ selenium_page_object.first_name.should == 'Katie'
163
+ end
164
+
165
+ it "should set some text on a text field element" do
166
+ selenium_browser.should_receive(:find_element).twice.and_return(selenium_browser)
167
+ selenium_browser.should_receive(:clear)
168
+ selenium_browser.should_receive(:send_keys).with('Katie')
169
+ selenium_page_object.first_name = 'Katie'
170
+ end
171
+
172
+ it "should retrieve a text field element" do
173
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
174
+ element = selenium_page_object.first_name_element
175
+ element.should be_instance_of PageObject::Elements::TextField
176
+ end
177
+ end
178
+
179
+
180
+ describe "hidden field accessors" do
181
+ it "should get the text from a hidden field" do
182
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
183
+ selenium_browser.should_receive(:attribute).with('value').and_return("12345")
184
+ selenium_page_object.social_security_number.should == "12345"
185
+ end
186
+
187
+ it "should retrieve a hidden field element" do
188
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
189
+ element = selenium_page_object.social_security_number_element
190
+ element.should be_instance_of PageObject::Elements::HiddenField
191
+ end
192
+ end
193
+
194
+ describe "text area accessors" do
195
+ it "should set some text on the text area" do
196
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
197
+ selenium_browser.should_receive(:clear)
198
+ selenium_browser.should_receive(:send_keys).with("123 main street")
199
+ selenium_page_object.address = "123 main street"
200
+ end
201
+
202
+ it "should get the text from the text area" do
203
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
204
+ selenium_browser.should_receive(:attribute).with('value').and_return("123 main street")
205
+ selenium_page_object.address.should == "123 main street"
206
+ end
207
+
208
+ it "should retrieve a text area element" do
209
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
210
+ element = selenium_page_object.address_element
211
+ element.should be_instance_of PageObject::Elements::TextArea
212
+ end
213
+ end
214
+
215
+ describe "select_list accessors" do
216
+ it "should should get the current item from a select list" do
217
+ selected = "OH"
218
+ selected.should_receive(:selected?).and_return(selected)
219
+ selected.should_receive(:text).and_return("OH")
220
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
221
+ selenium_browser.should_receive(:find_elements).and_return([selected])
222
+ selenium_page_object.state.should == "OH"
223
+ end
224
+
225
+ it "should set the current item of a select list" do
226
+ option = double('option')
227
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
228
+ selenium_browser.should_receive(:find_elements).and_return([option])
229
+ option.should_receive(:text).and_return('OH')
230
+ option.should_receive(:click)
231
+ selenium_page_object.state = "OH"
232
+ end
233
+
234
+ it "should retrieve the select list element" do
235
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
236
+ element = selenium_page_object.state_element
237
+ element.should be_instance_of PageObject::Elements::SelectList
238
+ end
239
+
240
+ it "should return list of selection options" do
241
+ option1 = double('option')
242
+ option2 = double('option')
243
+ option1.should_receive(:text).and_return("CA")
244
+ option2.should_receive(:text).and_return("OH")
245
+
246
+ select_element = double("select")
247
+ select_element.should_receive(:options).twice.and_return([option1, option2])
248
+ selenium_page_object.should_receive(:state_element).and_return(select_element)
249
+
250
+ selenium_page_object.state_options.should == ["CA","OH"]
251
+ end
252
+
253
+ end
254
+
255
+
256
+ describe "check_box accessors" do
257
+ it "should check a check box element" do
258
+ selenium_browser.should_receive(:find_element).twice.and_return(selenium_browser)
259
+ selenium_browser.should_receive(:selected?).and_return(false)
260
+ selenium_browser.should_receive(:click)
261
+ selenium_page_object.check_active
262
+ end
263
+
264
+ it "should clear a check box element" do
265
+ selenium_browser.should_receive(:find_element).twice.and_return(selenium_browser)
266
+ selenium_browser.should_receive(:selected?).and_return(true)
267
+ selenium_browser.should_receive(:click)
268
+ selenium_page_object.uncheck_active
269
+ end
270
+
271
+ it "should know if a check box element is selected" do
272
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
273
+ selenium_browser.should_receive(:selected?).and_return(true)
274
+ selenium_page_object.active_checked?.should be true
275
+ end
276
+
277
+ it "should retrieve a checkbox element" do
278
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
279
+ element = selenium_page_object.active_element
280
+ element.should be_instance_of PageObject::Elements::CheckBox
281
+ end
282
+ end
283
+
284
+
285
+ describe "radio accessors" do
286
+ it "should select a radio button" do
287
+ selenium_browser.should_receive(:find_element).twice.and_return(selenium_browser)
288
+ selenium_browser.should_receive(:selected?).and_return(false)
289
+ selenium_browser.should_receive(:click)
290
+ selenium_page_object.select_first
291
+ end
292
+
293
+ it "should determine if a radio is selected" do
294
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
295
+ selenium_browser.should_receive(:selected?).and_return(true)
296
+ selenium_page_object.first_selected?
297
+ end
298
+
299
+ it "should retrieve a radio button element" do
300
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
301
+ element = selenium_page_object.first_element
302
+ element.should be_instance_of PageObject::Elements::RadioButton
303
+ end
304
+ end
305
+
306
+ describe "button accessors" do
307
+ it "should be able to click a button" do
308
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
309
+ selenium_browser.should_receive(:click)
310
+ selenium_page_object.click_me
311
+ end
312
+
313
+ it "should retrieve a button element" do
314
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
315
+ element = selenium_page_object.click_me_element
316
+ element.should be_instance_of PageObject::Elements::Button
317
+ end
318
+ end
319
+
320
+ describe "div accessors" do
321
+ it "should retrieve the text from a div" do
322
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
323
+ selenium_browser.should_receive(:text).and_return("Message from div")
324
+ selenium_page_object.message.should == "Message from div"
325
+ end
326
+
327
+ it "should retrieve the div element from the page" do
328
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
329
+ element = selenium_page_object.message_element
330
+ element.should be_instance_of PageObject::Elements::Div
331
+ end
332
+ end
333
+
334
+ describe "span accessors" do
335
+ it "should retrieve the text from a span" do
336
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
337
+ selenium_browser.should_receive(:text).and_return("Alert")
338
+ selenium_page_object.alert_span.should == "Alert"
339
+ end
340
+
341
+ it "should retrieve the span element from the page" do
342
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
343
+ element = selenium_page_object.alert_span_element
344
+ element.should be_instance_of PageObject::Elements::Span
345
+ end
346
+ end
347
+
348
+ describe "table accessors" do
349
+ it "should retrieve the table element from the page" do
350
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
351
+ element = selenium_page_object.cart_element
352
+ element.should be_instance_of(PageObject::Elements::Table)
353
+ end
354
+ end
355
+
356
+ describe "table cell accessors" do
357
+ it "should retrieve the text from the cell" do
358
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
359
+ selenium_browser.should_receive(:text).and_return('celldata')
360
+ selenium_page_object.total.should == 'celldata'
361
+ end
362
+
363
+ it "should retrieve the cell element from the page" do
364
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
365
+ element = selenium_page_object.total_element
366
+ element.should be_instance_of PageObject::Elements::TableCell
367
+ end
368
+ end
369
+
370
+ describe "image accessors" do
371
+ it "should retrieve the image element from the page" do
372
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
373
+ element = selenium_page_object.logo_element
374
+ element.should be_instance_of PageObject::Elements::Image
375
+ end
376
+ end
377
+
378
+ describe "form accessors" do
379
+ it "should retrieve the form element from the page" do
380
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
381
+ element = selenium_page_object.login_element
382
+ element.should be_instance_of PageObject::Elements::Form
383
+ end
384
+ end
385
+
386
+ describe "list item accessors" do
387
+ it "should retrieve the text from the list item" do
388
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
389
+ selenium_browser.should_receive(:text).and_return("value")
390
+ selenium_page_object.item_one.should == "value"
391
+ end
392
+
393
+ it "should retrieve the list item from the page" do
394
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
395
+ element = selenium_page_object.item_one_element
396
+ element.should be_instance_of PageObject::Elements::ListItem
397
+ end
398
+ end
399
+
400
+ describe "unordered list accessors" do
401
+ it "should retrieve the element from the page" do
402
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
403
+ element = selenium_page_object.menu_element
404
+ element.should be_instance_of PageObject::Elements::UnorderedList
405
+ end
406
+ end
407
+
408
+ describe "ordered list accessors" do
409
+ it "should retrieve the element from the page" do
410
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
411
+ element = selenium_page_object.top_five_element
412
+ element.should be_instance_of PageObject::Elements::OrderedList
413
+ end
414
+ end
415
+
416
+ describe "h1 accessors" do
417
+ it "should retrieve the text from the h1" do
418
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
419
+ selenium_browser.should_receive(:text).and_return("value")
420
+ selenium_page_object.heading1.should == "value"
421
+ end
422
+
423
+ it "should retrieve the element from the page" do
424
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
425
+ element = selenium_page_object.heading1_element
426
+ element.should be_instance_of PageObject::Elements::Heading
427
+ end
428
+ end
429
+
430
+ describe "h2 accessors" do
431
+ it "should retrieve the text from the h2" do
432
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
433
+ selenium_browser.should_receive(:text).and_return("value")
434
+ selenium_page_object.heading2.should == "value"
435
+ end
436
+
437
+ it "should retrieve the element from the page" do
438
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
439
+ element = selenium_page_object.heading2_element
440
+ element.should be_instance_of PageObject::Elements::Heading
441
+ end
442
+ end
443
+
444
+ describe "h3 accessors" do
445
+ it "should retrieve the text from the h3" do
446
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
447
+ selenium_browser.should_receive(:text).and_return("value")
448
+ selenium_page_object.heading3.should == "value"
449
+ end
450
+
451
+ it "should retrieve the element from the page" do
452
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
453
+ element = selenium_page_object.heading3_element
454
+ element.should be_instance_of PageObject::Elements::Heading
455
+ end
456
+ end
457
+
458
+ describe "h4 accessors" do
459
+ it "should retrieve the text from the h4" do
460
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
461
+ selenium_browser.should_receive(:text).and_return("value")
462
+ selenium_page_object.heading4.should == "value"
463
+ end
464
+
465
+ it "should retrieve the element from the page" do
466
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
467
+ element = selenium_page_object.heading4_element
468
+ element.should be_instance_of PageObject::Elements::Heading
469
+ end
470
+ end
471
+
472
+ describe "h5 accessors" do
473
+ it "should retrieve the text from the h5" do
474
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
475
+ selenium_browser.should_receive(:text).and_return("value")
476
+ selenium_page_object.heading5.should == "value"
477
+ end
478
+
479
+ it "should retrieve the element from the page" do
480
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
481
+ element = selenium_page_object.heading5_element
482
+ element.should be_instance_of PageObject::Elements::Heading
483
+ end
484
+ end
485
+
486
+ describe "h6 accessors" do
487
+ it "should retrieve the text from the h6" do
488
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
489
+ selenium_browser.should_receive(:text).and_return("value")
490
+ selenium_page_object.heading6.should == "value"
491
+ end
492
+
493
+ it "should retrieve the element from the page" do
494
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
495
+ element = selenium_page_object.heading6_element
496
+ element.should be_instance_of PageObject::Elements::Heading
497
+ end
498
+ end
499
+
500
+
501
+ describe "p accessors" do
502
+ it "should retrieve the text from the p" do
503
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
504
+ selenium_browser.should_receive(:text).and_return("value")
505
+ selenium_page_object.first_para.should == "value"
506
+ end
507
+
508
+ it "should retrieve the element from the page" do
509
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
510
+ element = selenium_page_object.first_para_element
511
+ element.should be_instance_of PageObject::Elements::Paragraph
512
+ end
513
+ end
514
+
515
+ describe "file_field accessors" do
516
+ it "should set the file name" do
517
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
518
+ selenium_browser.should_receive(:send_keys).with('some_file')
519
+ selenium_page_object.upload_me = 'some_file'
520
+ end
521
+
522
+ it "should retrieve a file_field element" do
523
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
524
+ element = selenium_page_object.upload_me_element
525
+ element.should be_instance_of PageObject::Elements::FileField
526
+ end
527
+ end
528
+
529
+ describe "area accessors" do
530
+ context "when called on a page object" do
531
+ it "should generate accessor methods" do
532
+ selenium_page_object.should respond_to(:img_area)
533
+ selenium_page_object.should respond_to(:img_area_element)
534
+ end
535
+
536
+ it "should call a block on the element method when present" do
537
+ block_page_object.img_area_element.should == "area"
538
+ end
539
+ end
540
+
541
+ it "should click on the area" do
542
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
543
+ selenium_browser.should_receive(:click)
544
+ selenium_page_object.img_area
545
+ end
546
+
547
+ it "should retrieve the element from the page" do
548
+ selenium_browser.should_receive(:find_element).and_return(selenium_browser)
549
+ element = selenium_page_object.img_area_element
550
+ element.should be_instance_of PageObject::Elements::Area
551
+ end
552
+ end
553
+
554
+ describe "canvas accessors" do
555
+ context "when called on a page object" do
556
+ it "should generate accessor methods" do
557
+ selenium_page_object.should respond_to(:my_canvas_element)
558
+ end
559
+
560
+ it "should call a block on the element method when present" do
561
+ block_page_object.my_canvas_element.should == "canvas"
562
+ end
563
+ end
564
+ end
565
+
566
+ describe "audio accessors" do
567
+ context "when called on a page object" do
568
+ it "should generate accessor methods" do
569
+ selenium_page_object.should respond_to(:acdc_element)
570
+ end
571
+
572
+ it "should call a block on the element method when present" do
573
+ block_page_object.acdc_element.should == "audio"
574
+ end
575
+ end
576
+ end
577
+
578
+ describe "video accessors" do
579
+ context "when called on a page object" do
580
+ it "should generate accessor methods" do
581
+ selenium_page_object.should respond_to(:movie_element)
582
+ end
583
+
584
+ it "should call a block on the elmenet method when present" do
585
+ block_page_object.movie_element.should == "video"
586
+ end
587
+ end
588
+ end
589
+ end