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,254 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+
5
+ describe "Element with nested elements" do
6
+ context "in Watir" do
7
+ before(:each) do
8
+ @watir_driver = Watir::Element.new(nil, {})
9
+ @watir_element = PageObject::Elements::Element.new(@watir_driver, :platform => :watir_webdriver)
10
+ end
11
+
12
+ it "should find nested links" do
13
+ @watir_driver.should_receive(:link).with(:id => 'blah').and_return(@watir_driver)
14
+ @watir_element.link_element(:id => 'blah')
15
+ end
16
+
17
+ it "should find nested buttons" do
18
+ @watir_driver.should_receive(:button).with(:id => 'blah').and_return(@watir_driver)
19
+ @watir_element.button_element(:id => 'blah')
20
+ end
21
+
22
+ it "should find nested text fields" do
23
+ @watir_driver.should_receive(:text_field).with(:id => 'blah').and_return(@watir_driver)
24
+ @watir_element.text_field_element(:id => 'blah')
25
+ end
26
+
27
+ it "should find nested hidden fields" do
28
+ @watir_driver.should_receive(:hidden).and_return(@watir_driver)
29
+ @watir_element.hidden_field_element
30
+ end
31
+
32
+ it "should find nested text areas" do
33
+ @watir_driver.should_receive(:textarea).and_return(@watir_driver)
34
+ @watir_element.text_area_element
35
+ end
36
+
37
+ it "should find a nested select list" do
38
+ @watir_driver.should_receive(:select_list).and_return(@watir_driver)
39
+ @watir_element.select_list_element
40
+ end
41
+
42
+ it "should find a nested checkbox" do
43
+ @watir_driver.should_receive(:checkbox).and_return(@watir_driver)
44
+ @watir_element.checkbox_element
45
+ end
46
+
47
+ it "should find a nested radio button" do
48
+ @watir_driver.should_receive(:radio).and_return(@watir_driver)
49
+ @watir_element.radio_button_element
50
+ end
51
+
52
+ it "should find a nested div" do
53
+ @watir_driver.should_receive(:div).and_return(@watir_driver)
54
+ @watir_element.div_element
55
+ end
56
+
57
+ it "should find a nested span" do
58
+ @watir_driver.should_receive(:span).and_return(@watir_driver)
59
+ @watir_element.span_element
60
+ end
61
+
62
+ it "should find a nested table" do
63
+ @watir_driver.should_receive(:table).and_return(@watir_driver)
64
+ @watir_element.table_element
65
+ end
66
+
67
+ it "should find a nested cell" do
68
+ @watir_driver.should_receive(:td).and_return(@watir_driver)
69
+ @watir_element.cell_element
70
+ end
71
+
72
+ it "should find a nested image" do
73
+ @watir_driver.should_receive(:image).and_return(@watir_driver)
74
+ @watir_element.image_element
75
+ end
76
+
77
+ it "should find a nested form" do
78
+ @watir_driver.should_receive(:form).and_return(@watir_driver)
79
+ @watir_element.form_element
80
+ end
81
+
82
+ it "should find a nested ordered list" do
83
+ @watir_driver.should_receive(:ol).and_return(@watir_driver)
84
+ @watir_element.ordered_list_element
85
+ end
86
+
87
+ it "should find a nested unordered list" do
88
+ @watir_driver.should_receive(:ul).and_return(@watir_driver)
89
+ @watir_element.unordered_list_element
90
+ end
91
+
92
+ it "should find a nested list item" do
93
+ @watir_driver.should_receive(:li).and_return(@watir_driver)
94
+ @watir_element.list_item_element
95
+ end
96
+
97
+ it "should find a nested h1" do
98
+ @watir_driver.should_receive(:h1).and_return(@watir_driver)
99
+ @watir_element.h1_element
100
+ end
101
+
102
+ it "should find a nested h2" do
103
+ @watir_driver.should_receive(:h2).and_return(@watir_driver)
104
+ @watir_element.h2_element
105
+ end
106
+
107
+ it "should find a nested h3" do
108
+ @watir_driver.should_receive(:h3).and_return(@watir_driver)
109
+ @watir_element.h3_element
110
+ end
111
+
112
+ it "should find a nested h4" do
113
+ @watir_driver.should_receive(:h4).and_return(@watir_driver)
114
+ @watir_element.h4_element
115
+ end
116
+
117
+ it "should find a nested h5" do
118
+ @watir_driver.should_receive(:h5).and_return(@watir_driver)
119
+ @watir_element.h5_element
120
+ end
121
+
122
+ it "should find a nested h6" do
123
+ @watir_driver.should_receive(:h6).and_return(@watir_driver)
124
+ @watir_element.h6_element
125
+ end
126
+ end
127
+
128
+ context "in Selenium" do
129
+ before(:each) do
130
+ @selenium_driver = double('selenium')
131
+ @selenium_element = PageObject::Elements::Element.new(@selenium_driver, :platform => :selenium_webdriver)
132
+ end
133
+
134
+ it "should find nested links" do
135
+ @selenium_driver.should_receive(:find_element).with(:id, 'blah').and_return(@selenium_driver)
136
+ @selenium_element.link_element(:id => 'blah')
137
+ end
138
+
139
+ it "should find nested buttons" do
140
+ @selenium_driver.should_receive(:find_element).with(:id, 'blah').and_return(@selenium_driver)
141
+ @selenium_element.button_element(:id => 'blah')
142
+ end
143
+
144
+ it "should find nested text fields" do
145
+ @selenium_driver.should_receive(:find_element).with(:id, 'blah').and_return(@selenium_driver)
146
+ @selenium_element.text_field_element(:id => 'blah')
147
+ end
148
+
149
+ it "should find nested hidden fields" do
150
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
151
+ @selenium_element.hidden_field_element
152
+ end
153
+
154
+ it "should find nested text areas" do
155
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
156
+ @selenium_element.text_area_element
157
+ end
158
+
159
+ it "should find a nested select list" do
160
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
161
+ @selenium_element.select_list_element
162
+ end
163
+
164
+ it "should find a nested checkbox" do
165
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
166
+ @selenium_element.checkbox_element
167
+ end
168
+
169
+ it "should find a nested radio button" do
170
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
171
+ @selenium_element.radio_button_element
172
+ end
173
+
174
+ it "should find a nested div" do
175
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
176
+ @selenium_element.div_element
177
+ end
178
+
179
+ it "should find a nested span" do
180
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
181
+ @selenium_element.span_element
182
+ end
183
+
184
+ it "should find a nested table" do
185
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
186
+ @selenium_element.table_element
187
+ end
188
+
189
+ it "should find a nested cell" do
190
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
191
+ @selenium_element.cell_element
192
+ end
193
+
194
+ it "should find a nested image" do
195
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
196
+ @selenium_element.image_element
197
+ end
198
+
199
+ it "should find a nested form" do
200
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
201
+ @selenium_element.form_element
202
+ end
203
+
204
+ it "should find an ordered list" do
205
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
206
+ @selenium_element.ordered_list_element
207
+ end
208
+
209
+ it "should find an unordered list" do
210
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
211
+ @selenium_element.unordered_list_element
212
+ end
213
+
214
+ it "should find a nested list item" do
215
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
216
+ @selenium_element.list_item_element
217
+ end
218
+
219
+ it "should find a nested h1" do
220
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
221
+ @selenium_element.h1_element
222
+ end
223
+
224
+ it "should find a nested h2" do
225
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
226
+ @selenium_element.h2_element
227
+ end
228
+
229
+ it "should find a nested h3" do
230
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
231
+ @selenium_element.h3_element
232
+ end
233
+
234
+ it "should find a nested h4" do
235
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
236
+ @selenium_element.h4_element
237
+ end
238
+
239
+ it "should find a nested h5" do
240
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
241
+ @selenium_element.h5_element
242
+ end
243
+
244
+ it "should find a nested h6" do
245
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
246
+ @selenium_element.h6_element
247
+ end
248
+
249
+ it "should find a nested paragraph" do
250
+ @selenium_driver.should_receive(:find_element).and_return(@selenium_driver)
251
+ @selenium_element.paragraph_element
252
+ end
253
+ end
254
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::Option do
5
+
6
+ describe "interface" do
7
+ it "should register as tag_name :option" do
8
+ ::PageObject::Elements.element_class_for(:option).should == ::PageObject::Elements::Option
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,94 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::OrderedList do
5
+ let(:ol) { PageObject::Elements::OrderedList }
6
+
7
+ describe "when mapping how to find an element" do
8
+ it "should map watir types to same" do
9
+ [:class, :id, :index, :xpath].each do |t|
10
+ identifier = ol.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, :index, :name, :xpath].each do |t|
17
+ key, value = ol.selenium_identifier_for t => 'value'
18
+ key.should == t
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "interface" do
24
+ let(:ol_element) { double('ol_element') }
25
+
26
+ it "should register as tag_name :ol" do
27
+ ::PageObject::Elements.element_class_for(:ol).should == ::PageObject::Elements::OrderedList
28
+ end
29
+
30
+ context "for watir" do
31
+ it "should return a list item when indexed" do
32
+ ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir_webdriver)
33
+ ol_element.stub(:ols).and_return([ol_element])
34
+ ol_element.stub(:find_elements).and_return(ol_element)
35
+ ol_element.stub(:map).and_return([ol_element])
36
+ ol_element.stub(:parent).and_return(ol_element)
37
+ ol_element.stub(:element).and_return(ol_element)
38
+ ol_element.stub(:==).and_return(true)
39
+ ol[1]
40
+ end
41
+
42
+ it "should know how many list items it contains" do
43
+ ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir_webdriver)
44
+ ol_element.stub(:ols).and_return([ol_element])
45
+ ol_element.stub(:find_elements).and_return(ol_element)
46
+ ol_element.stub(:map).and_return([ol_element])
47
+ ol_element.stub(:parent).and_return(ol_element)
48
+ ol_element.stub(:element).and_return(ol_element)
49
+ ol_element.stub(:==).and_return(true)
50
+ ol.items.should == 1
51
+ end
52
+
53
+ it "should iterate over the list items" do
54
+ ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir_webdriver)
55
+ ol.should_receive(:items).and_return(5)
56
+ ol.stub(:[])
57
+ count = 0
58
+ ol.each { |item| count += 1 }
59
+ count.should == 5
60
+ end
61
+ end
62
+
63
+ context "for selenium" do
64
+ it "should return a list item when indexed" do
65
+ ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium_webdriver)
66
+ ol_element.should_receive(:find_elements).and_return(ol_element)
67
+ ol_element.should_receive(:map).and_return([ol_element])
68
+ ol_element.should_receive(:parent).and_return(ol_element)
69
+ ol_element.should_receive(:element).and_return(ol_element)
70
+ ol_element.should_receive(:==).and_return(true)
71
+ ol[1]
72
+ end
73
+
74
+ it "should know how many list items it contains" do
75
+ ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium_webdriver)
76
+ ol_element.should_receive(:find_elements).and_return(ol_element)
77
+ ol_element.should_receive(:map).and_return([ol_element])
78
+ ol_element.should_receive(:parent).and_return(ol_element)
79
+ ol_element.should_receive(:element).and_return(ol_element)
80
+ ol_element.should_receive(:==).and_return(true)
81
+ ol.items.should == 1
82
+ end
83
+
84
+ it "should iterate over the list items" do
85
+ ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium_webdriver)
86
+ ol.should_receive(:items).and_return(5)
87
+ ol.stub(:[])
88
+ count = 0
89
+ ol.each { |item| count += 1 }
90
+ count.should == 5
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::Paragraph do
5
+ let(:paragraph) { PageObject::Elements::Paragraph }
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 = paragraph.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, :index].each do |t|
16
+ key, value = paragraph.selenium_identifier_for t => 'value'
17
+ key.should == t
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "interface" do
23
+
24
+ it "should register with type :checkbox" do
25
+ ::PageObject::Elements.element_class_for(:p).should == ::PageObject::Elements::Paragraph
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,142 @@
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, :index].each do |t|
17
+ key, value = selectlist.selenium_identifier_for t => 'value'
18
+ key.should == t
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "interface" do
24
+ let(:sel_list) { double('select_list') }
25
+ let(:opts) { [sel_list, sel_list] }
26
+
27
+ before(:each) do
28
+ sel_list.stub(:find_elements).and_return(sel_list)
29
+ sel_list.stub(:each)
30
+ sel_list.stub(:wd).and_return(sel_list)
31
+ sel_list.stub(:map).and_return(opts)
32
+ sel_list.stub(:any?)
33
+ sel_list.stub(:include?)
34
+ sel_list.stub(:select).and_return(opts)
35
+ sel_list.stub(:text).and_return('blah')
36
+ end
37
+
38
+ it "should register with tag_name :select" do
39
+ ::PageObject::Elements.element_class_for(:select).should == ::PageObject::Elements::SelectList
40
+ end
41
+
42
+ context "for watir" do
43
+ let(:watir_sel_list) { PageObject::Elements::SelectList.new(sel_list, :platform => :watir_webdriver) }
44
+
45
+ it "should return an option when indexed" do
46
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
47
+ watir_sel_list[0].should be_instance_of PageObject::Elements::Option
48
+ end
49
+
50
+ it "should return an array of options" do
51
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
52
+ watir_sel_list.options.size.should == 2
53
+ end
54
+
55
+ it "should return an array of selected options" do
56
+ sel_list.stub(:selected_options).and_return(opts)
57
+ sel_list.stub(:text).and_return(sel_list)
58
+ watir_sel_list.selected_options.should == opts
59
+ end
60
+
61
+ it "should know if it includes some value" do
62
+ sel_list.stub(:include?).with('blah').and_return(true)
63
+ watir_sel_list.include?('blah')
64
+ end
65
+
66
+ it "should know if an option is selected" do
67
+ sel_list.stub(:selected?).with('blah').and_return(true)
68
+ watir_sel_list.selected?('blah')
69
+ end
70
+
71
+ it "should be able to get the value for the selected options" do
72
+ sel_list.stub(:selected_options).and_return(opts)
73
+ sel_list.stub(:value).and_return(sel_list)
74
+ watir_sel_list.selected_values.should == opts
75
+ end
76
+ end
77
+
78
+ context "for selenium" do
79
+ let(:selenium_sel_list) { PageObject::Elements::SelectList.new(sel_list, :platform => :selenium_webdriver) }
80
+
81
+ it "should return an option when indexed" do
82
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
83
+ selenium_sel_list[1].should be_instance_of PageObject::Elements::Option
84
+ end
85
+
86
+ it "should return an array of options" do
87
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
88
+ selenium_sel_list.options.size.should == 2
89
+ end
90
+
91
+ it "should select an element" do
92
+ option = double('option')
93
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return([option])
94
+ option.should_receive(:text).and_return('something')
95
+ option.should_receive(:click)
96
+ selenium_sel_list.select 'something'
97
+ end
98
+
99
+ it "should return an array of selected options" do
100
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
101
+ opts[0].should_receive(:selected?).and_return(true)
102
+ opts[0].should_receive(:text).and_return('test1')
103
+ opts[1].should_receive(:selected?).and_return(false)
104
+ selected = selenium_sel_list.selected_options
105
+ selected.size.should == 1
106
+ selected[0].should == 'test1'
107
+ end
108
+
109
+ it "should return an array of selected options" do
110
+ sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
111
+ opts[0].should_receive(:selected?).and_return(true)
112
+ opts[0].should_receive(:attribute).and_return('test1')
113
+ opts[1].should_receive(:selected?).and_return(false)
114
+ selected = selenium_sel_list.selected_values
115
+ selected.size.should == 1
116
+ selected[0].should == 'test1'
117
+ end
118
+
119
+ it "should know if it includes some value" do
120
+ sel_list.should_receive(:find_elements).and_return(opts)
121
+ opts[0].should_receive(:text).and_return('blah')
122
+ selenium_sel_list.should include 'blah'
123
+ end
124
+
125
+ it "should know if an option is selected" do
126
+ sel_list.should_receive(:find_elements).and_return(opts)
127
+ opts[0].should_receive(:selected?).twice.and_return(true)
128
+ opts[0].should_receive(:text).and_return('blah')
129
+ selenium_sel_list.selected?('blah').should be true
130
+ end
131
+
132
+ it "should be able to clear selected options" do
133
+ sel_list.should_receive(:find_elements).and_return(opts)
134
+ opts.each do |opt|
135
+ opt.should_receive(:selected?).and_return(true)
136
+ opt.should_receive(:click)
137
+ end
138
+ selenium_sel_list.clear
139
+ end
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,44 @@
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, :value, :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, :value, :index].each do |t|
16
+ key, value = radiobutton.selenium_identifier_for t => 'value'
17
+ key.should == t
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "interface" do
23
+
24
+ it "should register as type :radio" do
25
+ ::PageObject::Elements.element_class_for(:input, :radio).should == ::PageObject::Elements::RadioButton
26
+ end
27
+
28
+ context "for selenium" do
29
+ let(:selenium_rb) { double('radio_button') }
30
+ let(:radio_button) { PageObject::Elements::RadioButton.new(selenium_rb, :platform => :selenium_webdriver) }
31
+
32
+ it "should select" do
33
+ selenium_rb.should_receive(:click)
34
+ selenium_rb.should_receive(:selected?).and_return(false)
35
+ radio_button.select
36
+ end
37
+
38
+ it "should know if it is selected" do
39
+ selenium_rb.should_receive(:selected?).and_return(true)
40
+ radio_button.should be_selected
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::TextField do
5
+
6
+ describe "when mapping how to find an element" do
7
+ let(:textfield) { PageObject::Elements::TextField }
8
+
9
+ it "should map watir types to same" do
10
+ [:class, :id, :index, :name, :title, :xpath, :text, :label].each do |t|
11
+ identifier = textfield.watir_identifier_for t => 'value'
12
+ identifier.keys.first.should == t
13
+ end
14
+ end
15
+
16
+ it "should map selenium types to same" do
17
+ [:class, :id, :name, :title, :xpath, :index, :text, :label].each do |t|
18
+ key, value = textfield.selenium_identifier_for t => 'value'
19
+ key.should == t
20
+ end
21
+ end
22
+ end
23
+
24
+ describe "interface" do
25
+ let(:text_field_element) { double('text_field') }
26
+ let(:selenium_text_field) { PageObject::Elements::TextField.new(text_field_element, :platform => :selenium_webdriver) }
27
+
28
+ it "should register with type :text" do
29
+ ::PageObject::Elements.element_class_for(:input, :text).should == ::PageObject::Elements::TextField
30
+ end
31
+
32
+ it "should register with type :password" do
33
+ ::PageObject::Elements.element_class_for(:input, :password).should == ::PageObject::Elements::TextField
34
+ end
35
+
36
+ it "should append text" do
37
+ text_field_element.should_receive(:send_keys).with('abc')
38
+ selenium_text_field.append('abc')
39
+ end
40
+
41
+ context "for selenium" do
42
+ it "should set its' value" do
43
+ text_field_element.should_receive(:clear)
44
+ text_field_element.should_receive(:send_keys).with('Joseph')
45
+ selenium_text_field.value = 'Joseph'
46
+ end
47
+ end
48
+ end
49
+ end