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,45 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class Media < Element
5
+
6
+ def autoplay?
7
+ attribute(:autoplay)
8
+ end
9
+
10
+ def has_controls?
11
+ attribute(:controls)
12
+ end
13
+
14
+ def paused?
15
+ attribute(:paused)
16
+ end
17
+
18
+ def duration
19
+ duration = attribute(:duration)
20
+ return duration.to_f if duration
21
+ end
22
+
23
+ def volume
24
+ volume = attribute(:volume)
25
+ return volume.to_i if volume
26
+ end
27
+
28
+ def ended?
29
+ attribute(:ended)
30
+ end
31
+
32
+ def seeking?
33
+ attribute(:seeking)
34
+ end
35
+
36
+ def loop?
37
+ attribute(:loop)
38
+ end
39
+
40
+ def muted?
41
+ attribute(:muted)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,10 @@
1
+ module PageObject
2
+ module Elements
3
+ class Option < Element
4
+
5
+ end
6
+
7
+ ::PageObject::Elements.tag_to_class[:option] = ::PageObject::Elements::Option
8
+
9
+ end
10
+ end
@@ -0,0 +1,50 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class OrderedList < Element
5
+ include Enumerable
6
+
7
+ def initialize(element, platform)
8
+ @element = element
9
+ include_platform_for platform
10
+ end
11
+
12
+ #
13
+ # iterator that yields with a PageObject::Elements::ListItem
14
+ #
15
+ # @return [PageObject::Elements::ListItem]
16
+ #
17
+ def each
18
+ for index in 1..self.items do
19
+ yield self[index-1]
20
+ end
21
+ end
22
+
23
+ protected
24
+
25
+ def child_xpath
26
+ ".//child::li"
27
+ end
28
+
29
+ def self.watir_finders
30
+ [:class, :id, :index, :xpath]
31
+ end
32
+
33
+ def include_platform_for platform
34
+ super
35
+ if platform[:platform] == :watir_webdriver
36
+ require 'page-object/platforms/watir_webdriver/ordered_list'
37
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::OrderedList
38
+ elsif platform[:platform] == :selenium_webdriver
39
+ require 'page-object/platforms/selenium_webdriver/ordered_list'
40
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::OrderedList
41
+ else
42
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ ::PageObject::Elements.tag_to_class[:ol] = ::PageObject::Elements::OrderedList
49
+ end
50
+ end
@@ -0,0 +1,9 @@
1
+ module PageObject
2
+ module Elements
3
+ class Paragraph < Element
4
+
5
+ end
6
+
7
+ ::PageObject::Elements.tag_to_class[:p] = ::PageObject::Elements::Paragraph
8
+ end
9
+ end
@@ -0,0 +1,37 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class RadioButton < Element
5
+
6
+ def initialize(element, platform)
7
+ @element = element
8
+ include_platform_for platform
9
+ end
10
+
11
+ protected
12
+
13
+ def self.watir_finders
14
+ super + [:value, :label]
15
+ end
16
+
17
+ def self.selenium_finders
18
+ super + [:value, :label]
19
+ end
20
+
21
+ def include_platform_for platform
22
+ super
23
+ if platform[:platform] == :watir_webdriver
24
+ require 'page-object/platforms/watir_webdriver/radio_button'
25
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::RadioButton
26
+ elsif platform[:platform] == :selenium_webdriver
27
+ require 'page-object/platforms/selenium_webdriver/radio_button'
28
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::RadioButton
29
+ else
30
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
31
+ end
32
+ end
33
+ end
34
+
35
+ ::PageObject::Elements.type_to_class[:radio] = ::PageObject::Elements::RadioButton
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class SelectList < Element
5
+
6
+ def initialize(element, platform)
7
+ @element = element
8
+ include_platform_for platform
9
+ end
10
+
11
+ protected
12
+
13
+ def child_xpath
14
+ ".//child::option"
15
+ end
16
+
17
+ def self.watir_finders
18
+ super + [:text, :value, :label]
19
+ end
20
+
21
+ def self.selenium_finders
22
+ super + [:label]
23
+ end
24
+
25
+ def include_platform_for platform
26
+ super
27
+ if platform[:platform] == :watir_webdriver
28
+ require 'page-object/platforms/watir_webdriver/select_list'
29
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::SelectList
30
+ elsif platform[:platform] == :selenium_webdriver
31
+ require 'page-object/platforms/selenium_webdriver/select_list'
32
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::SelectList
33
+ else
34
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ ::PageObject::Elements.tag_to_class[:select] = ::PageObject::Elements::SelectList
41
+ end
42
+ end
@@ -0,0 +1,19 @@
1
+ module PageObject
2
+ module Elements
3
+ class Span < Element
4
+
5
+ protected
6
+
7
+ def self.watir_finders
8
+ [:class, :id, :index, :text, :title, :xpath]
9
+ end
10
+
11
+ def self.selenium_finders
12
+ [:class, :css, :id, :name, :text, :title, :xpath, :index]
13
+ end
14
+ end
15
+
16
+ ::PageObject::Elements.tag_to_class[:span] = ::PageObject::Elements::Span
17
+
18
+ end
19
+ end
@@ -0,0 +1,68 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class Table < Element
5
+ include Enumerable
6
+
7
+ def initialize(element, platform)
8
+ @element = element
9
+ include_platform_for platform
10
+ end
11
+
12
+ #
13
+ # iterator that yields with a PageObject::Elements::TableRow
14
+ #
15
+ # @return [PageObject::Elements::TableRow]
16
+ #
17
+ def each
18
+ for index in 1..self.rows do
19
+ yield self[index-1]
20
+ end
21
+ end
22
+
23
+ #
24
+ # return the first row
25
+ #
26
+ # @return PageObject::Elements::TableRow
27
+ #
28
+ def first_row
29
+ self[0]
30
+ end
31
+
32
+ #
33
+ # return the last row
34
+ #
35
+ # @return PageObject::Elements::TableRow
36
+ #
37
+ def last_row
38
+ self[-1]
39
+ end
40
+
41
+ protected
42
+
43
+ def child_xpath
44
+ ".//child::tr"
45
+ end
46
+
47
+ def initialize_row(row_element, platform)
48
+ ::PageObject::Elements::TableRow.new(row_element, platform)
49
+ end
50
+
51
+
52
+ def include_platform_for platform
53
+ super
54
+ if platform[:platform] == :watir_webdriver
55
+ require 'page-object/platforms/watir_webdriver/table'
56
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::Table
57
+ elsif platform[:platform] == :selenium_webdriver
58
+ require 'page-object/platforms/selenium_webdriver/table'
59
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::Table
60
+ else
61
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
62
+ end
63
+ end
64
+ end
65
+
66
+ ::PageObject::Elements.tag_to_class[:table] = ::PageObject::Elements::Table
67
+ end
68
+ end
@@ -0,0 +1,28 @@
1
+ module PageObject
2
+ module Elements
3
+ class TableCell < Element
4
+
5
+ #
6
+ # return true if the element is enabled
7
+ #
8
+ def enabled?
9
+ true
10
+ end
11
+
12
+ protected
13
+
14
+ def self.watir_finders
15
+ super + [:text]
16
+ end
17
+
18
+ def self.selenium_finders
19
+ super + [:text]
20
+ end
21
+
22
+ end
23
+
24
+ ::PageObject::Elements.tag_to_class[:td] = ::PageObject::Elements::TableCell
25
+ ::PageObject::Elements.tag_to_class[:th] = ::PageObject::Elements::TableCell
26
+
27
+ end
28
+ end
@@ -0,0 +1,50 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class TableRow < Element
5
+ include Enumerable
6
+
7
+ def initialize(element, platform)
8
+ @element = element
9
+ include_platform_for platform
10
+ end
11
+
12
+ #
13
+ # iterator that yields with a PageObject::Elements::TableCell
14
+ #
15
+ # @return [PageObject::Elements::TableCell]
16
+ #
17
+ def each
18
+ for index in 1..self.columns do
19
+ yield self[index-1]
20
+ end
21
+ end
22
+
23
+ protected
24
+
25
+ def child_xpath
26
+ ".//child::td|th"
27
+ end
28
+
29
+ def initialize_cell(row_element, platform)
30
+ ::PageObject::Elements::TableCell.new(row_element, platform)
31
+ end
32
+
33
+
34
+ def include_platform_for platform
35
+ super
36
+ if platform[:platform] == :watir_webdriver
37
+ require 'page-object/platforms/watir_webdriver/table_row'
38
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::TableRow
39
+ elsif platform[:platform] == :selenium_webdriver
40
+ require 'page-object/platforms/selenium_webdriver/table_row'
41
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TableRow
42
+ else
43
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
44
+ end
45
+ end
46
+ end
47
+
48
+ ::PageObject::Elements.tag_to_class[:tr] = ::PageObject::Elements::TableRow
49
+ end
50
+ end
@@ -0,0 +1,38 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class TextArea < Element
5
+
6
+ def initialize(element, platform)
7
+ @element = element
8
+ include_platform_for platform
9
+ end
10
+
11
+ def self.watir_finders
12
+ super + [:label]
13
+ end
14
+
15
+ def self.selenium_finders
16
+ super + [:label]
17
+ end
18
+
19
+ protected
20
+
21
+ def include_platform_for platform
22
+ super
23
+ if platform[:platform] == :watir_webdriver
24
+ require 'page-object/platforms/watir_webdriver/text_area'
25
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::TextArea
26
+ elsif platform[:platform] == :selenium_webdriver
27
+ require 'page-object/platforms/selenium_webdriver/text_area'
28
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TextArea
29
+ else
30
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
31
+ end
32
+ end
33
+ end
34
+
35
+ ::PageObject::Elements.tag_to_class[:textarea] = ::PageObject::Elements::TextArea
36
+
37
+ end
38
+ end
@@ -0,0 +1,42 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class TextField < Element
5
+
6
+ def initialize(element, platform)
7
+ @element = element
8
+ include_platform_for platform
9
+ end
10
+
11
+ def append(text)
12
+ element.send_keys text
13
+ end
14
+
15
+ protected
16
+
17
+ def self.watir_finders
18
+ super + [:title, :value, :text, :label]
19
+ end
20
+
21
+ def self.selenium_finders
22
+ super + [:title, :value, :text, :label]
23
+ end
24
+
25
+ def include_platform_for platform
26
+ super
27
+ if platform[:platform] == :watir_webdriver
28
+ require 'page-object/platforms/watir_webdriver/text_field'
29
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::TextField
30
+ elsif platform[:platform] == :selenium_webdriver
31
+ require 'page-object/platforms/selenium_webdriver/text_field'
32
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TextField
33
+ else
34
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
35
+ end
36
+ end
37
+ end
38
+
39
+ ::PageObject::Elements.type_to_class[:text] = ::PageObject::Elements::TextField
40
+ ::PageObject::Elements.type_to_class[:password] = ::PageObject::Elements::TextField
41
+ end
42
+ end
@@ -0,0 +1,51 @@
1
+
2
+ module PageObject
3
+ module Elements
4
+ class UnorderedList < Element
5
+ include Enumerable
6
+
7
+ def initialize(element, platform)
8
+ @element = element
9
+ include_platform_for platform
10
+ end
11
+
12
+ #
13
+ # iterator that yields with a PageObject::Elements::ListItem
14
+ #
15
+ # @return [PageObject::Elements::ListItem]
16
+ #
17
+ def each
18
+ for index in 1..self.items do
19
+ yield self[index-1]
20
+ end
21
+ end
22
+
23
+
24
+ protected
25
+
26
+ def child_xpath
27
+ ".//child::li"
28
+ end
29
+
30
+ def self.watir_finders
31
+ [:class, :id, :index, :xpath]
32
+ end
33
+
34
+ def include_platform_for platform
35
+ super
36
+ if platform[:platform] == :watir_webdriver
37
+ require 'page-object/platforms/watir_webdriver/unordered_list'
38
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::UnorderedList
39
+ elsif platform[:platform] == :selenium_webdriver
40
+ require 'page-object/platforms/selenium_webdriver/unordered_list'
41
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::UnorderedList
42
+ else
43
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
44
+ end
45
+ end
46
+ end
47
+
48
+ ::PageObject::Elements.tag_to_class[:ul] = ::PageObject::Elements::UnorderedList
49
+
50
+ end
51
+ end
@@ -0,0 +1,18 @@
1
+ module PageObject
2
+ module Elements
3
+ class Video < Media
4
+
5
+ def height
6
+ height = attribute(:height)
7
+ return height.to_i if height
8
+ end
9
+
10
+ def width
11
+ width = attribute(:width)
12
+ return width.to_i if width
13
+ end
14
+
15
+ end
16
+ ::PageObject::Elements.type_to_class[:video] = ::PageObject::Elements::Video
17
+ end
18
+ end
@@ -0,0 +1,59 @@
1
+ module PageObject
2
+ module Elements
3
+ class << self
4
+
5
+ #
6
+ # method to return the collection of tag_name to class mappings
7
+ #
8
+ def tag_to_class
9
+ @tag_to_class ||= {}
10
+ end
11
+
12
+ def type_to_class
13
+ @type_to_class ||= {}
14
+ end
15
+
16
+ #
17
+ # method to return the element for a tag_name
18
+ #
19
+ def element_class_for(tag_name, type=nil)
20
+ return type_to_class[type.to_sym] if type
21
+ tag_to_class[tag_name.to_sym] || ::PageObject::Elements::Element
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+
28
+
29
+ require 'page-object/elements/element'
30
+ require 'page-object/elements/link'
31
+ require 'page-object/elements/text_field'
32
+ require 'page-object/elements/select_list'
33
+ require 'page-object/elements/check_box'
34
+ require 'page-object/elements/button'
35
+ require 'page-object/elements/radio_button'
36
+ require 'page-object/elements/div'
37
+ require 'page-object/elements/table'
38
+ require 'page-object/elements/table_cell'
39
+ require 'page-object/elements/table_row'
40
+ require 'page-object/elements/span'
41
+ require 'page-object/elements/image'
42
+ require 'page-object/elements/hidden_field'
43
+ require 'page-object/elements/form'
44
+ require 'page-object/elements/text_area'
45
+ require 'page-object/elements/list_item'
46
+ require 'page-object/elements/unordered_list'
47
+ require 'page-object/elements/ordered_list'
48
+ require 'page-object/elements/option'
49
+ require 'page-object/elements/heading'
50
+ require 'page-object/elements/paragraph'
51
+ require 'page-object/elements/label'
52
+ require 'page-object/elements/file_field'
53
+ require 'page-object/elements/area'
54
+ require 'page-object/elements/canvas'
55
+ require 'page-object/elements/media'
56
+ require 'page-object/elements/audio'
57
+ require 'page-object/elements/video'
58
+
59
+
@@ -0,0 +1,36 @@
1
+ module PageObject
2
+ module IndexedProperties
3
+ class TableOfElements
4
+ include PageObject
5
+ include LoadsPlatform
6
+
7
+ def initialize (browser, identifier_list)
8
+ initialize_browser(browser)
9
+ @identifier_list = identifier_list
10
+ @indexed_property_class = Class.new {
11
+ include PageObject
12
+ include LoadsPlatform
13
+ extend Accessors
14
+
15
+ def initialize (browser, index, identifier_list)
16
+ initialize_browser(browser)
17
+
18
+ identifier_list.each do |identifier|
19
+ type = identifier[0]
20
+ name = identifier[1]
21
+ how_and_what = identifier[2].clone # Cannot modify the original...
22
+ how_and_what.each do |key, value|
23
+ how_and_what[key] = value % index
24
+ end
25
+ self.class.send type, name, how_and_what unless self.class.instance_methods.include? name
26
+ end
27
+ end
28
+ }
29
+ end
30
+
31
+ def [] (index)
32
+ @indexed_property_class.new(@browser,index,@identifier_list)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,14 @@
1
+ module PageObject
2
+ module Javascript
3
+
4
+ module JQuery
5
+ #
6
+ # return the number of pending ajax requests
7
+ #
8
+ def self.pending_requests
9
+ 'return jQuery.active'
10
+ end
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module PageObject
2
+ module Javascript
3
+
4
+ module Prototype
5
+ #
6
+ # return the number of pending ajax requests
7
+ #
8
+ def self.pending_requests
9
+ 'return Ajax.activeRequestCount'
10
+ end
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ module PageObject
2
+ module Javascript
3
+
4
+ module YUI
5
+ #
6
+ # return the number of pending ajax requests
7
+ #
8
+ def self.pending_requests
9
+ "var inProgress=0
10
+ for(var i=0; i < YAHOO.util.Connect._transaction_id; i++) {
11
+ if(YAHOO.util.Connect.isCallInProgress(i))
12
+ inProgress++;
13
+ }
14
+ return inProgress;"
15
+ end
16
+ end
17
+
18
+ end
19
+ end