page_object 1.1.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 (272) 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 +7 -0
  7. data/ChangeLog +809 -0
  8. data/Gemfile +14 -0
  9. data/Guardfile +20 -0
  10. data/LICENSE +20 -0
  11. data/README.md +111 -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/bold.feature +21 -0
  18. data/features/button.feature +98 -0
  19. data/features/canvas.feature +37 -0
  20. data/features/check_box.feature +55 -0
  21. data/features/div.feature +45 -0
  22. data/features/element.feature +322 -0
  23. data/features/file_field.feature +40 -0
  24. data/features/form.feature +43 -0
  25. data/features/frames.feature +75 -0
  26. data/features/generic_elements.feature +29 -0
  27. data/features/gxt_table_extension.feature +24 -0
  28. data/features/headings.feature +97 -0
  29. data/features/hidden_field.feature +45 -0
  30. data/features/html/04-Death_Becomes_Fur.mp4 +0 -0
  31. data/features/html/04-Death_Becomes_Fur.oga +0 -0
  32. data/features/html/async.html +36 -0
  33. data/features/html/double_click.html +13 -0
  34. data/features/html/failure.html +8 -0
  35. data/features/html/frame_1.html +18 -0
  36. data/features/html/frame_2.html +16 -0
  37. data/features/html/frame_3.html +14 -0
  38. data/features/html/frames.html +12 -0
  39. data/features/html/hover.html +12 -0
  40. data/features/html/iframes.html +12 -0
  41. data/features/html/images/circle.png +0 -0
  42. data/features/html/images/img_pulpit.jpg +0 -0
  43. data/features/html/images/submit.gif +0 -0
  44. data/features/html/indexed_property.html +55 -0
  45. data/features/html/modal.html +17 -0
  46. data/features/html/modal_1.html +38 -0
  47. data/features/html/modal_2.html +27 -0
  48. data/features/html/movie.mp4 +0 -0
  49. data/features/html/movie.ogg +0 -0
  50. data/features/html/multi_elements.html +144 -0
  51. data/features/html/nested_elements.html +77 -0
  52. data/features/html/nested_frame_1.html +1 -0
  53. data/features/html/nested_frame_2.html +11 -0
  54. data/features/html/nested_frame_3.html +14 -0
  55. data/features/html/nested_frames.html +10 -0
  56. data/features/html/planets.gif +0 -0
  57. data/features/html/static_elements.html +207 -0
  58. data/features/html/success.html +8 -0
  59. data/features/html/sun.gif +0 -0
  60. data/features/html/sun.html +7 -0
  61. data/features/image.feature +50 -0
  62. data/features/indexed_property.feature +117 -0
  63. data/features/javascript.feature +28 -0
  64. data/features/label.feature +46 -0
  65. data/features/link.feature +52 -0
  66. data/features/list_item.feature +36 -0
  67. data/features/modal_dialog.feature +15 -0
  68. data/features/multi_elements.feature +492 -0
  69. data/features/nested_elements.feature +117 -0
  70. data/features/ordered_list.feature +56 -0
  71. data/features/page_level_actions.feature +90 -0
  72. data/features/paragraph.feature +35 -0
  73. data/features/radio_button.feature +58 -0
  74. data/features/radio_button_group.feature +29 -0
  75. data/features/sample-app/public/jquery-1.3.2.js +4376 -0
  76. data/features/sample-app/public/jquery.html +30 -0
  77. data/features/sample-app/public/prototype-1.6.0.3.js +4320 -0
  78. data/features/sample-app/public/prototype.html +35 -0
  79. data/features/sample-app/sample_app.rb +35 -0
  80. data/features/section.feature +132 -0
  81. data/features/select_list.feature +86 -0
  82. data/features/span.feature +37 -0
  83. data/features/step_definitions/accessor_steps.rb +64 -0
  84. data/features/step_definitions/area_steps.rb +19 -0
  85. data/features/step_definitions/async_steps.rb +83 -0
  86. data/features/step_definitions/audio_steps.rb +27 -0
  87. data/features/step_definitions/bold_steps.rb +12 -0
  88. data/features/step_definitions/button_steps.rb +48 -0
  89. data/features/step_definitions/canvas_steps.rb +15 -0
  90. data/features/step_definitions/check_box_steps.rb +35 -0
  91. data/features/step_definitions/div_steps.rb +19 -0
  92. data/features/step_definitions/element_steps.rb +266 -0
  93. data/features/step_definitions/file_field_steps.rb +19 -0
  94. data/features/step_definitions/form_steps.rb +19 -0
  95. data/features/step_definitions/frames_steps.rb +159 -0
  96. data/features/step_definitions/generic_element_steps.rb +31 -0
  97. data/features/step_definitions/gxt_table_steps.rb +58 -0
  98. data/features/step_definitions/headings_steps.rb +12 -0
  99. data/features/step_definitions/hidden_field_steps.rb +27 -0
  100. data/features/step_definitions/image_steps.rb +27 -0
  101. data/features/step_definitions/indexed_property_steps.rb +163 -0
  102. data/features/step_definitions/javascript_steps.rb +53 -0
  103. data/features/step_definitions/label_steps.rb +19 -0
  104. data/features/step_definitions/link_steps.rb +40 -0
  105. data/features/step_definitions/list_item_steps.rb +19 -0
  106. data/features/step_definitions/modal_dialog_steps.rb +62 -0
  107. data/features/step_definitions/multi_elements_steps.rb +541 -0
  108. data/features/step_definitions/nested_elements_steps.rb +212 -0
  109. data/features/step_definitions/ordered_list_steps.rb +23 -0
  110. data/features/step_definitions/page_level_actions_steps.rb +135 -0
  111. data/features/step_definitions/page_traversal_steps.rb +4 -0
  112. data/features/step_definitions/paragraph_steps.rb +28 -0
  113. data/features/step_definitions/radio_button_group_steps.rb +36 -0
  114. data/features/step_definitions/radio_button_steps.rb +27 -0
  115. data/features/step_definitions/section_steps.rb +268 -0
  116. data/features/step_definitions/select_list_steps.rb +65 -0
  117. data/features/step_definitions/span_steps.rb +19 -0
  118. data/features/step_definitions/table_cell_steps.rb +15 -0
  119. data/features/step_definitions/table_row_steps.rb +23 -0
  120. data/features/step_definitions/table_steps.rb +70 -0
  121. data/features/step_definitions/text_area_steps.rb +35 -0
  122. data/features/step_definitions/text_field_steps.rb +35 -0
  123. data/features/step_definitions/unordered_list_steps.rb +23 -0
  124. data/features/step_definitions/video_steps.rb +45 -0
  125. data/features/support/ajax_text_environment.rb +26 -0
  126. data/features/support/env.rb +8 -0
  127. data/features/support/hooks.rb +8 -0
  128. data/features/support/page.rb +382 -0
  129. data/features/support/persistent_browser.rb +70 -0
  130. data/features/support/targets/firefox14_osx.rb +6 -0
  131. data/features/support/targets/firefox14_windows7.rb +6 -0
  132. data/features/support/url_helper.rb +57 -0
  133. data/features/table.feature +122 -0
  134. data/features/table_cell.feature +45 -0
  135. data/features/table_row.feature +43 -0
  136. data/features/text_area.feature +51 -0
  137. data/features/text_field.feature +70 -0
  138. data/features/unordered_list.feature +56 -0
  139. data/features/video.feature +73 -0
  140. data/lib/page-object.rb +421 -0
  141. data/lib/page-object/accessors.rb +1412 -0
  142. data/lib/page-object/core_ext/string.rb +5 -0
  143. data/lib/page-object/element_locators.rb +21 -0
  144. data/lib/page-object/elements.rb +60 -0
  145. data/lib/page-object/elements/area.rb +31 -0
  146. data/lib/page-object/elements/audio.rb +9 -0
  147. data/lib/page-object/elements/bold.rb +11 -0
  148. data/lib/page-object/elements/button.rb +35 -0
  149. data/lib/page-object/elements/canvas.rb +23 -0
  150. data/lib/page-object/elements/check_box.rb +37 -0
  151. data/lib/page-object/elements/div.rb +19 -0
  152. data/lib/page-object/elements/element.rb +226 -0
  153. data/lib/page-object/elements/file_field.rb +38 -0
  154. data/lib/page-object/elements/form.rb +36 -0
  155. data/lib/page-object/elements/heading.rb +15 -0
  156. data/lib/page-object/elements/hidden_field.rb +22 -0
  157. data/lib/page-object/elements/image.rb +36 -0
  158. data/lib/page-object/elements/label.rb +19 -0
  159. data/lib/page-object/elements/link.rb +46 -0
  160. data/lib/page-object/elements/list_item.rb +19 -0
  161. data/lib/page-object/elements/media.rb +45 -0
  162. data/lib/page-object/elements/option.rb +10 -0
  163. data/lib/page-object/elements/ordered_list.rb +50 -0
  164. data/lib/page-object/elements/paragraph.rb +9 -0
  165. data/lib/page-object/elements/radio_button.rb +37 -0
  166. data/lib/page-object/elements/select_list.rb +42 -0
  167. data/lib/page-object/elements/span.rb +19 -0
  168. data/lib/page-object/elements/table.rb +79 -0
  169. data/lib/page-object/elements/table_cell.rb +28 -0
  170. data/lib/page-object/elements/table_row.rb +50 -0
  171. data/lib/page-object/elements/text_area.rb +38 -0
  172. data/lib/page-object/elements/text_field.rb +42 -0
  173. data/lib/page-object/elements/unordered_list.rb +51 -0
  174. data/lib/page-object/elements/video.rb +18 -0
  175. data/lib/page-object/indexed_properties.rb +40 -0
  176. data/lib/page-object/javascript/angularjs.rb +14 -0
  177. data/lib/page-object/javascript/jquery.rb +14 -0
  178. data/lib/page-object/javascript/prototype.rb +14 -0
  179. data/lib/page-object/javascript/yui.rb +19 -0
  180. data/lib/page-object/javascript_framework_facade.rb +80 -0
  181. data/lib/page-object/loads_platform.rb +45 -0
  182. data/lib/page-object/locator_generator.rb +131 -0
  183. data/lib/page-object/nested_elements.rb +17 -0
  184. data/lib/page-object/page_factory.rb +108 -0
  185. data/lib/page-object/page_populator.rb +83 -0
  186. data/lib/page-object/platforms.rb +18 -0
  187. data/lib/page-object/platforms/selenium_webdriver.rb +30 -0
  188. data/lib/page-object/platforms/selenium_webdriver/button.rb +15 -0
  189. data/lib/page-object/platforms/selenium_webdriver/check_box.rb +29 -0
  190. data/lib/page-object/platforms/selenium_webdriver/element.rb +291 -0
  191. data/lib/page-object/platforms/selenium_webdriver/file_field.rb +16 -0
  192. data/lib/page-object/platforms/selenium_webdriver/form.rb +16 -0
  193. data/lib/page-object/platforms/selenium_webdriver/image.rb +28 -0
  194. data/lib/page-object/platforms/selenium_webdriver/link.rb +23 -0
  195. data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +39 -0
  196. data/lib/page-object/platforms/selenium_webdriver/page_object.rb +1237 -0
  197. data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +22 -0
  198. data/lib/page-object/platforms/selenium_webdriver/select_list.rb +93 -0
  199. data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +42 -0
  200. data/lib/page-object/platforms/selenium_webdriver/table.rb +42 -0
  201. data/lib/page-object/platforms/selenium_webdriver/table_row.rb +43 -0
  202. data/lib/page-object/platforms/selenium_webdriver/text_area.rb +17 -0
  203. data/lib/page-object/platforms/selenium_webdriver/text_field.rb +17 -0
  204. data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +39 -0
  205. data/lib/page-object/platforms/watir_webdriver.rb +30 -0
  206. data/lib/page-object/platforms/watir_webdriver/check_box.rb +29 -0
  207. data/lib/page-object/platforms/watir_webdriver/element.rb +249 -0
  208. data/lib/page-object/platforms/watir_webdriver/file_field.rb +16 -0
  209. data/lib/page-object/platforms/watir_webdriver/form.rb +16 -0
  210. data/lib/page-object/platforms/watir_webdriver/image.rb +22 -0
  211. data/lib/page-object/platforms/watir_webdriver/link.rb +15 -0
  212. data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +35 -0
  213. data/lib/page-object/platforms/watir_webdriver/page_object.rb +1082 -0
  214. data/lib/page-object/platforms/watir_webdriver/radio_button.rb +22 -0
  215. data/lib/page-object/platforms/watir_webdriver/select_list.rb +74 -0
  216. data/lib/page-object/platforms/watir_webdriver/table.rb +38 -0
  217. data/lib/page-object/platforms/watir_webdriver/table_row.rb +37 -0
  218. data/lib/page-object/platforms/watir_webdriver/text_area.rb +23 -0
  219. data/lib/page-object/platforms/watir_webdriver/text_field.rb +16 -0
  220. data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +36 -0
  221. data/lib/page-object/sections.rb +29 -0
  222. data/lib/page-object/version.rb +4 -0
  223. data/lib/page-object/widgets.rb +133 -0
  224. data/page_object.gemspec +31 -0
  225. data/pageobject.gems +1 -0
  226. data/spec/page-object/accessors_spec.rb +40 -0
  227. data/spec/page-object/element_locators_spec.rb +1122 -0
  228. data/spec/page-object/elements/area_spec.rb +45 -0
  229. data/spec/page-object/elements/bold_spec.rb +29 -0
  230. data/spec/page-object/elements/button_spec.rb +64 -0
  231. data/spec/page-object/elements/canvas_spec.rb +40 -0
  232. data/spec/page-object/elements/check_box_spec.rb +49 -0
  233. data/spec/page-object/elements/div_spec.rb +28 -0
  234. data/spec/page-object/elements/element_spec.rb +114 -0
  235. data/spec/page-object/elements/file_field_spec.rb +39 -0
  236. data/spec/page-object/elements/form_spec.rb +28 -0
  237. data/spec/page-object/elements/heading_spec.rb +48 -0
  238. data/spec/page-object/elements/hidden_field_spec.rb +28 -0
  239. data/spec/page-object/elements/image_spec.rb +66 -0
  240. data/spec/page-object/elements/label_spec.rb +29 -0
  241. data/spec/page-object/elements/link_spec.rb +49 -0
  242. data/spec/page-object/elements/list_item_spec.rb +29 -0
  243. data/spec/page-object/elements/nested_element_spec.rb +254 -0
  244. data/spec/page-object/elements/option_spec.rb +11 -0
  245. data/spec/page-object/elements/ordered_list_spec.rb +94 -0
  246. data/spec/page-object/elements/paragraph_spec.rb +27 -0
  247. data/spec/page-object/elements/select_list_spec.rb +142 -0
  248. data/spec/page-object/elements/selenium/radio_button_spec.rb +44 -0
  249. data/spec/page-object/elements/selenium/text_field_spec.rb +49 -0
  250. data/spec/page-object/elements/selenium_element_spec.rb +177 -0
  251. data/spec/page-object/elements/span_spec.rb +26 -0
  252. data/spec/page-object/elements/table_cell_spec.rb +21 -0
  253. data/spec/page-object/elements/table_row_spec.rb +70 -0
  254. data/spec/page-object/elements/table_spec.rb +98 -0
  255. data/spec/page-object/elements/text_area_spec.rb +39 -0
  256. data/spec/page-object/elements/unordered_list_spec.rb +94 -0
  257. data/spec/page-object/elements/watir_element_spec.rb +145 -0
  258. data/spec/page-object/javascript_framework_facade_spec.rb +61 -0
  259. data/spec/page-object/loads_platform_spec.rb +53 -0
  260. data/spec/page-object/page-object_spec.rb +407 -0
  261. data/spec/page-object/page_factory_spec.rb +238 -0
  262. data/spec/page-object/page_populator_spec.rb +122 -0
  263. data/spec/page-object/page_section_spec.rb +73 -0
  264. data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +68 -0
  265. data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
  266. data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +29 -0
  267. data/spec/page-object/platforms/watir_webdriver_spec.rb +9 -0
  268. data/spec/page-object/selenium_accessors_spec.rb +609 -0
  269. data/spec/page-object/watir_accessors_spec.rb +1134 -0
  270. data/spec/page-object/widget_spec.rb +226 -0
  271. data/spec/spec_helper.rb +47 -0
  272. metadata +601 -0
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::Heading do
5
+ let(:heading) { PageObject::Elements::Heading }
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 = heading.watir_identifier_for t => 'value'
11
+ expect(identifier.keys.first).to eql 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 = heading.selenium_identifier_for t => 'value'
18
+ expect(key).to eql t
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "interface" do
24
+ it "should register with tag :h1" do
25
+ expect(::PageObject::Elements.element_class_for(:h1)).to eql ::PageObject::Elements::Heading
26
+ end
27
+
28
+ it "should register with tag :h2" do
29
+ expect(::PageObject::Elements.element_class_for(:h2)).to eql ::PageObject::Elements::Heading
30
+ end
31
+
32
+ it "should register with tag :h3" do
33
+ expect(::PageObject::Elements.element_class_for(:h3)).to eql ::PageObject::Elements::Heading
34
+ end
35
+
36
+ it "should register with tag :h4" do
37
+ expect(::PageObject::Elements.element_class_for(:h4)).to eql ::PageObject::Elements::Heading
38
+ end
39
+
40
+ it "should register with tag :h5" do
41
+ expect(::PageObject::Elements.element_class_for(:h5)).to eql ::PageObject::Elements::Heading
42
+ end
43
+
44
+ it "should register with tag :h6" do
45
+ expect(::PageObject::Elements.element_class_for(:h6)).to eql ::PageObject::Elements::Heading
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::HiddenField do
5
+ let(:hiddenfield) { PageObject::Elements::HiddenField }
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, :xpath, :value].each do |t|
10
+ identifier = hiddenfield.watir_identifier_for t => 'value'
11
+ expect(identifier.keys.first).to eql t
12
+ end
13
+ end
14
+
15
+ it "should map selenium types to same" do
16
+ [:class, :id, :name, :xpath, :index, :value].each do |t|
17
+ key, value = hiddenfield.selenium_identifier_for t => 'value'
18
+ expect(key).to eql t
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "interface" do
24
+ it "should register with type :hidden" do
25
+ expect(::PageObject::Elements.element_class_for(:input, :hidden)).to eql ::PageObject::Elements::HiddenField
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::Image do
5
+ let(:image) { PageObject::Elements::Image }
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, :alt, :src].each do |t|
10
+ identifier = image.watir_identifier_for t => 'value'
11
+ expect(identifier.keys.first).to eql t
12
+ end
13
+ end
14
+
15
+ it "should map selenium types to same" do
16
+ [:class, :id, :index, :name, :xpath, :alt, :src].each do |t|
17
+ key, value = image.selenium_identifier_for t => 'value'
18
+ expect(key).to eql t
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "interface" do
24
+ let(:image_element) { double('image_element') }
25
+
26
+ before(:each) do
27
+ allow(image_element).to receive(:size).and_return(image_element)
28
+ end
29
+
30
+ it "should register with tag_name :img" do
31
+ expect(::PageObject::Elements.element_class_for(:img)).to eql ::PageObject::Elements::Image
32
+ end
33
+
34
+ context "for watir" do
35
+ it "should know the images width" do
36
+ image = PageObject::Elements::Image.new(image_element, :platform => :watir_webdriver)
37
+ expect(image_element).to receive(:width).and_return(100)
38
+ expect(image.width).to eql 100
39
+ end
40
+
41
+ it "should know the images height" do
42
+ image = PageObject::Elements::Image.new(image_element, :platform => :watir_webdriver)
43
+ expect(image_element).to receive(:height).and_return(120)
44
+ expect(image.height).to eql 120
45
+ end
46
+ end
47
+
48
+ context "for selenium" do
49
+ it "should know the images width" do
50
+ dim = double('dimension')
51
+ image = PageObject::Elements::Image.new(image_element, :platform => :selenium_webdriver)
52
+ expect(image_element).to receive(:size).and_return(dim)
53
+ expect(dim).to receive(:width).and_return(100)
54
+ expect(image.width).to eql 100
55
+ end
56
+
57
+ it "should know the images height" do
58
+ dim = double('dimension')
59
+ image = PageObject::Elements::Image.new(image_element, :platform => :selenium_webdriver)
60
+ expect(image_element).to receive(:size).and_return(dim)
61
+ expect(dim).to receive(:height).and_return(120)
62
+ expect(image.height).to eql 120
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::Label do
5
+ let(:label) { PageObject::Elements::Label }
6
+
7
+ describe "when mapping how to find an element" do
8
+ it "should map watir types to same" do
9
+ [:class, :id, :text, :index, :xpath].each do |t|
10
+ identifier = label.watir_identifier_for t => 'value'
11
+ expect(identifier.keys.first).to eql t
12
+ end
13
+ end
14
+
15
+ it "should map selenium types to same" do
16
+ [:class, :id, :text, :index, :xpath].each do |t|
17
+ key, value = label.selenium_identifier_for t => 'value'
18
+ expect(key).to eql t
19
+ end
20
+ end
21
+
22
+ describe "interface" do
23
+ it "should register with tag :label" do
24
+ expect(::PageObject::Elements.element_class_for(:label)).to eql ::PageObject::Elements::Label
25
+ end
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::Link do
5
+ let(:link) { PageObject::Elements::Link }
6
+
7
+ describe "when mapping how to find an element" do
8
+ it "should map watir types to same" do
9
+ [:class, :href, :id, :index, :name, :text, :xpath, :css, :title].each do |t|
10
+ identifier = link.watir_identifier_for t => 'value'
11
+ expect(identifier.keys.first).to eql t
12
+ end
13
+ end
14
+
15
+ it "should map selenium types to watir" do
16
+ [:link, :link_text].each do |t|
17
+ identifier = link.watir_identifier_for t => 'value'
18
+ expect(identifier.keys.first).to eql :text
19
+ end
20
+ end
21
+
22
+ it "should map selenium types to same" do
23
+ [:class, :id, :link, :link_text, :name, :xpath, :index, :css, :title].each do |t|
24
+ key, value = link.selenium_identifier_for t => 'value'
25
+ expect(key).to eql t
26
+ end
27
+ end
28
+
29
+ it "should map watir types to selenium" do
30
+ key, value = link.selenium_identifier_for :text => 'value'
31
+ expect(key).to eql :link_text
32
+ end
33
+ end
34
+
35
+ describe "interface" do
36
+ let(:link_element) { double('link_element') }
37
+
38
+ it "should register with tag :a" do
39
+ expect(::PageObject::Elements.element_class_for(:a)).to eql ::PageObject::Elements::Link
40
+ end
41
+
42
+ context "for selenium" do
43
+ it "should return error when asked for its' value" do
44
+ link = PageObject::Elements::Link.new(link_element, :platform => :selenium_webdriver)
45
+ expect(lambda { link.value }).to raise_error
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ describe PageObject::Elements::ListItem do
5
+ let(:list_item) { PageObject::Elements::ListItem }
6
+
7
+ describe "when mapping how to find an element" do
8
+ it "should map watir types to same" do
9
+ [:class, :id, :index, :text, :xpath].each do |t|
10
+ identifier = list_item.watir_identifier_for t => 'value'
11
+ expect(identifier.keys.first).to eql t
12
+ end
13
+ end
14
+
15
+ it "should map selenium types to same" do
16
+ [:class, :id, :index, :name, :text, :xpath].each do |t|
17
+ key, value = list_item.selenium_identifier_for t => 'value'
18
+ expect(key).to eql t
19
+ end
20
+ end
21
+
22
+ describe "interface" do
23
+ it "should register as tag_name :li" do
24
+ expect(::PageObject::Elements.element_class_for(:li)).to eql ::PageObject::Elements::ListItem
25
+ end
26
+ end
27
+ end
28
+ end
29
+
@@ -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
+ expect(@watir_driver).to 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
+ expect(@watir_driver).to 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
+ expect(@watir_driver).to 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
+ expect(@watir_driver).to receive(:hidden).and_return(@watir_driver)
29
+ @watir_element.hidden_field_element
30
+ end
31
+
32
+ it "should find nested text areas" do
33
+ expect(@watir_driver).to 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
+ expect(@watir_driver).to 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
+ expect(@watir_driver).to receive(:checkbox).and_return(@watir_driver)
44
+ @watir_element.checkbox_element
45
+ end
46
+
47
+ it "should find a nested radio button" do
48
+ expect(@watir_driver).to receive(:radio).and_return(@watir_driver)
49
+ @watir_element.radio_button_element
50
+ end
51
+
52
+ it "should find a nested div" do
53
+ expect(@watir_driver).to receive(:div).and_return(@watir_driver)
54
+ @watir_element.div_element
55
+ end
56
+
57
+ it "should find a nested span" do
58
+ expect(@watir_driver).to receive(:span).and_return(@watir_driver)
59
+ @watir_element.span_element
60
+ end
61
+
62
+ it "should find a nested table" do
63
+ expect(@watir_driver).to receive(:table).and_return(@watir_driver)
64
+ @watir_element.table_element
65
+ end
66
+
67
+ it "should find a nested cell" do
68
+ expect(@watir_driver).to receive(:td).and_return(@watir_driver)
69
+ @watir_element.cell_element
70
+ end
71
+
72
+ it "should find a nested image" do
73
+ expect(@watir_driver).to receive(:image).and_return(@watir_driver)
74
+ @watir_element.image_element
75
+ end
76
+
77
+ it "should find a nested form" do
78
+ expect(@watir_driver).to receive(:form).and_return(@watir_driver)
79
+ @watir_element.form_element
80
+ end
81
+
82
+ it "should find a nested ordered list" do
83
+ expect(@watir_driver).to 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
+ expect(@watir_driver).to 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
+ expect(@watir_driver).to receive(:li).and_return(@watir_driver)
94
+ @watir_element.list_item_element
95
+ end
96
+
97
+ it "should find a nested h1" do
98
+ expect(@watir_driver).to receive(:h1).and_return(@watir_driver)
99
+ @watir_element.h1_element
100
+ end
101
+
102
+ it "should find a nested h2" do
103
+ expect(@watir_driver).to receive(:h2).and_return(@watir_driver)
104
+ @watir_element.h2_element
105
+ end
106
+
107
+ it "should find a nested h3" do
108
+ expect(@watir_driver).to receive(:h3).and_return(@watir_driver)
109
+ @watir_element.h3_element
110
+ end
111
+
112
+ it "should find a nested h4" do
113
+ expect(@watir_driver).to receive(:h4).and_return(@watir_driver)
114
+ @watir_element.h4_element
115
+ end
116
+
117
+ it "should find a nested h5" do
118
+ expect(@watir_driver).to receive(:h5).and_return(@watir_driver)
119
+ @watir_element.h5_element
120
+ end
121
+
122
+ it "should find a nested h6" do
123
+ expect(@watir_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
176
+ @selenium_element.div_element
177
+ end
178
+
179
+ it "should find a nested span" do
180
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
181
+ @selenium_element.span_element
182
+ end
183
+
184
+ it "should find a nested table" do
185
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
186
+ @selenium_element.table_element
187
+ end
188
+
189
+ it "should find a nested cell" do
190
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
191
+ @selenium_element.cell_element
192
+ end
193
+
194
+ it "should find a nested image" do
195
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
196
+ @selenium_element.image_element
197
+ end
198
+
199
+ it "should find a nested form" do
200
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
201
+ @selenium_element.form_element
202
+ end
203
+
204
+ it "should find an ordered list" do
205
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to 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
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
221
+ @selenium_element.h1_element
222
+ end
223
+
224
+ it "should find a nested h2" do
225
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
226
+ @selenium_element.h2_element
227
+ end
228
+
229
+ it "should find a nested h3" do
230
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
231
+ @selenium_element.h3_element
232
+ end
233
+
234
+ it "should find a nested h4" do
235
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
236
+ @selenium_element.h4_element
237
+ end
238
+
239
+ it "should find a nested h5" do
240
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
241
+ @selenium_element.h5_element
242
+ end
243
+
244
+ it "should find a nested h6" do
245
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
246
+ @selenium_element.h6_element
247
+ end
248
+
249
+ it "should find a nested paragraph" do
250
+ expect(@selenium_driver).to receive(:find_element).and_return(@selenium_driver)
251
+ @selenium_element.paragraph_element
252
+ end
253
+ end
254
+ end