page-object-lds 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -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 +799 -0
  8. data/Gemfile +13 -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 +88 -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 +52 -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 +205 -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 +98 -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/select_list.feature +86 -0
  81. data/features/span.feature +37 -0
  82. data/features/step_definitions/accessor_steps.rb +60 -0
  83. data/features/step_definitions/area_steps.rb +19 -0
  84. data/features/step_definitions/async_steps.rb +83 -0
  85. data/features/step_definitions/audio_steps.rb +27 -0
  86. data/features/step_definitions/bold_steps.rb +12 -0
  87. data/features/step_definitions/button_steps.rb +43 -0
  88. data/features/step_definitions/canvas_steps.rb +15 -0
  89. data/features/step_definitions/check_box_steps.rb +35 -0
  90. data/features/step_definitions/div_steps.rb +19 -0
  91. data/features/step_definitions/element_steps.rb +266 -0
  92. data/features/step_definitions/file_field_steps.rb +19 -0
  93. data/features/step_definitions/form_steps.rb +19 -0
  94. data/features/step_definitions/frames_steps.rb +159 -0
  95. data/features/step_definitions/generic_element_steps.rb +31 -0
  96. data/features/step_definitions/gxt_table_steps.rb +58 -0
  97. data/features/step_definitions/headings_steps.rb +12 -0
  98. data/features/step_definitions/hidden_field_steps.rb +27 -0
  99. data/features/step_definitions/image_steps.rb +27 -0
  100. data/features/step_definitions/indexed_property_steps.rb +129 -0
  101. data/features/step_definitions/javascript_steps.rb +53 -0
  102. data/features/step_definitions/label_steps.rb +19 -0
  103. data/features/step_definitions/link_steps.rb +40 -0
  104. data/features/step_definitions/list_item_steps.rb +19 -0
  105. data/features/step_definitions/modal_dialog_steps.rb +62 -0
  106. data/features/step_definitions/multi_elements_steps.rb +541 -0
  107. data/features/step_definitions/nested_elements_steps.rb +212 -0
  108. data/features/step_definitions/ordered_list_steps.rb +23 -0
  109. data/features/step_definitions/page_level_actions_steps.rb +135 -0
  110. data/features/step_definitions/page_traversal_steps.rb +4 -0
  111. data/features/step_definitions/paragraph_steps.rb +28 -0
  112. data/features/step_definitions/radio_button_group_steps.rb +36 -0
  113. data/features/step_definitions/radio_button_steps.rb +27 -0
  114. data/features/step_definitions/select_list_steps.rb +65 -0
  115. data/features/step_definitions/span_steps.rb +19 -0
  116. data/features/step_definitions/table_cell_steps.rb +15 -0
  117. data/features/step_definitions/table_steps.rb +70 -0
  118. data/features/step_definitions/text_area_steps.rb +35 -0
  119. data/features/step_definitions/text_field_steps.rb +35 -0
  120. data/features/step_definitions/unordered_list_steps.rb +23 -0
  121. data/features/step_definitions/video_steps.rb +45 -0
  122. data/features/support/ajax_text_environment.rb +26 -0
  123. data/features/support/env.rb +8 -0
  124. data/features/support/hooks.rb +8 -0
  125. data/features/support/page.rb +373 -0
  126. data/features/support/persistent_browser.rb +70 -0
  127. data/features/support/targets/firefox14_osx.rb +6 -0
  128. data/features/support/targets/firefox14_windows7.rb +6 -0
  129. data/features/support/url_helper.rb +57 -0
  130. data/features/table.feature +122 -0
  131. data/features/table_cell.feature +45 -0
  132. data/features/text_area.feature +51 -0
  133. data/features/text_field.feature +70 -0
  134. data/features/unordered_list.feature +56 -0
  135. data/features/video.feature +73 -0
  136. data/lib/page-object-lds.rb +421 -0
  137. data/lib/page-object/accessors.rb +1334 -0
  138. data/lib/page-object/core_ext/string.rb +5 -0
  139. data/lib/page-object/element_locators.rb +21 -0
  140. data/lib/page-object/elements/area.rb +31 -0
  141. data/lib/page-object/elements/audio.rb +9 -0
  142. data/lib/page-object/elements/bold.rb +11 -0
  143. data/lib/page-object/elements/button.rb +35 -0
  144. data/lib/page-object/elements/canvas.rb +23 -0
  145. data/lib/page-object/elements/check_box.rb +40 -0
  146. data/lib/page-object/elements/div.rb +19 -0
  147. data/lib/page-object/elements/element.rb +225 -0
  148. data/lib/page-object/elements/file_field.rb +41 -0
  149. data/lib/page-object/elements/form.rb +39 -0
  150. data/lib/page-object/elements/heading.rb +15 -0
  151. data/lib/page-object/elements/hidden_field.rb +22 -0
  152. data/lib/page-object/elements/image.rb +39 -0
  153. data/lib/page-object/elements/label.rb +19 -0
  154. data/lib/page-object/elements/link.rb +49 -0
  155. data/lib/page-object/elements/list_item.rb +19 -0
  156. data/lib/page-object/elements/media.rb +45 -0
  157. data/lib/page-object/elements/option.rb +10 -0
  158. data/lib/page-object/elements/ordered_list.rb +53 -0
  159. data/lib/page-object/elements/paragraph.rb +9 -0
  160. data/lib/page-object/elements/radio_button.rb +40 -0
  161. data/lib/page-object/elements/select_list.rb +45 -0
  162. data/lib/page-object/elements/span.rb +19 -0
  163. data/lib/page-object/elements/table.rb +82 -0
  164. data/lib/page-object/elements/table_cell.rb +28 -0
  165. data/lib/page-object/elements/table_row.rb +53 -0
  166. data/lib/page-object/elements/text_area.rb +41 -0
  167. data/lib/page-object/elements/text_field.rb +45 -0
  168. data/lib/page-object/elements/unordered_list.rb +54 -0
  169. data/lib/page-object/elements/video.rb +18 -0
  170. data/lib/page-object/indexed_properties.rb +36 -0
  171. data/lib/page-object/javascript/angularjs.rb +14 -0
  172. data/lib/page-object/javascript/jquery.rb +14 -0
  173. data/lib/page-object/javascript/prototype.rb +14 -0
  174. data/lib/page-object/javascript/yui.rb +19 -0
  175. data/lib/page-object/javascript_framework_facade.rb +80 -0
  176. data/lib/page-object/loads_platform.rb +26 -0
  177. data/lib/page-object/locator_generator.rb +130 -0
  178. data/lib/page-object/nested_elements.rb +17 -0
  179. data/lib/page-object/page_factory.rb +108 -0
  180. data/lib/page-object/page_populator.rb +83 -0
  181. data/lib/page-object/platforms.rb +19 -0
  182. data/lib/page-object/platforms/lds_watir_webdriver.rb +17 -0
  183. data/lib/page-object/platforms/lds_watir_webdriver/check_box.rb +29 -0
  184. data/lib/page-object/platforms/lds_watir_webdriver/element.rb +249 -0
  185. data/lib/page-object/platforms/lds_watir_webdriver/file_field.rb +16 -0
  186. data/lib/page-object/platforms/lds_watir_webdriver/form.rb +16 -0
  187. data/lib/page-object/platforms/lds_watir_webdriver/image.rb +22 -0
  188. data/lib/page-object/platforms/lds_watir_webdriver/link.rb +15 -0
  189. data/lib/page-object/platforms/lds_watir_webdriver/ordered_list.rb +35 -0
  190. data/lib/page-object/platforms/lds_watir_webdriver/page_object.rb +1044 -0
  191. data/lib/page-object/platforms/lds_watir_webdriver/radio_button.rb +22 -0
  192. data/lib/page-object/platforms/lds_watir_webdriver/select_list.rb +74 -0
  193. data/lib/page-object/platforms/lds_watir_webdriver/table.rb +38 -0
  194. data/lib/page-object/platforms/lds_watir_webdriver/table_row.rb +37 -0
  195. data/lib/page-object/platforms/lds_watir_webdriver/text_area.rb +23 -0
  196. data/lib/page-object/platforms/lds_watir_webdriver/text_field.rb +16 -0
  197. data/lib/page-object/platforms/lds_watir_webdriver/unordered_list.rb +36 -0
  198. data/lib/page-object/platforms/selenium_webdriver.rb +17 -0
  199. data/lib/page-object/platforms/selenium_webdriver/button.rb +15 -0
  200. data/lib/page-object/platforms/selenium_webdriver/check_box.rb +29 -0
  201. data/lib/page-object/platforms/selenium_webdriver/element.rb +291 -0
  202. data/lib/page-object/platforms/selenium_webdriver/file_field.rb +16 -0
  203. data/lib/page-object/platforms/selenium_webdriver/form.rb +16 -0
  204. data/lib/page-object/platforms/selenium_webdriver/image.rb +28 -0
  205. data/lib/page-object/platforms/selenium_webdriver/link.rb +23 -0
  206. data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +39 -0
  207. data/lib/page-object/platforms/selenium_webdriver/page_object.rb +1162 -0
  208. data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +22 -0
  209. data/lib/page-object/platforms/selenium_webdriver/select_list.rb +93 -0
  210. data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +42 -0
  211. data/lib/page-object/platforms/selenium_webdriver/table.rb +42 -0
  212. data/lib/page-object/platforms/selenium_webdriver/table_row.rb +43 -0
  213. data/lib/page-object/platforms/selenium_webdriver/text_area.rb +17 -0
  214. data/lib/page-object/platforms/selenium_webdriver/text_field.rb +17 -0
  215. data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +39 -0
  216. data/lib/page-object/platforms/watir_webdriver.rb +17 -0
  217. data/lib/page-object/platforms/watir_webdriver/check_box.rb +29 -0
  218. data/lib/page-object/platforms/watir_webdriver/element.rb +249 -0
  219. data/lib/page-object/platforms/watir_webdriver/file_field.rb +16 -0
  220. data/lib/page-object/platforms/watir_webdriver/form.rb +16 -0
  221. data/lib/page-object/platforms/watir_webdriver/image.rb +22 -0
  222. data/lib/page-object/platforms/watir_webdriver/link.rb +15 -0
  223. data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +35 -0
  224. data/lib/page-object/platforms/watir_webdriver/page_object.rb +1044 -0
  225. data/lib/page-object/platforms/watir_webdriver/radio_button.rb +22 -0
  226. data/lib/page-object/platforms/watir_webdriver/select_list.rb +74 -0
  227. data/lib/page-object/platforms/watir_webdriver/table.rb +38 -0
  228. data/lib/page-object/platforms/watir_webdriver/table_row.rb +37 -0
  229. data/lib/page-object/platforms/watir_webdriver/text_area.rb +23 -0
  230. data/lib/page-object/platforms/watir_webdriver/text_field.rb +16 -0
  231. data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +36 -0
  232. data/lib/page-object/version.rb +4 -0
  233. data/lib/page-object/widgets.rb +134 -0
  234. data/page-object-lds.gemspec +33 -0
  235. data/pageobject.gems +1 -0
  236. data/spec/page-object/accessors_spec.rb +40 -0
  237. data/spec/page-object/element_locators_spec.rb +1100 -0
  238. data/spec/page-object/elements/area_spec.rb +45 -0
  239. data/spec/page-object/elements/bold_spec.rb +29 -0
  240. data/spec/page-object/elements/button_spec.rb +50 -0
  241. data/spec/page-object/elements/canvas_spec.rb +40 -0
  242. data/spec/page-object/elements/check_box_spec.rb +49 -0
  243. data/spec/page-object/elements/div_spec.rb +28 -0
  244. data/spec/page-object/elements/element_spec.rb +114 -0
  245. data/spec/page-object/elements/file_field_spec.rb +39 -0
  246. data/spec/page-object/elements/form_spec.rb +28 -0
  247. data/spec/page-object/elements/heading_spec.rb +48 -0
  248. data/spec/page-object/elements/hidden_field_spec.rb +28 -0
  249. data/spec/page-object/elements/image_spec.rb +66 -0
  250. data/spec/page-object/elements/label_spec.rb +29 -0
  251. data/spec/page-object/elements/link_spec.rb +49 -0
  252. data/spec/page-object/elements/list_item_spec.rb +29 -0
  253. data/spec/page-object/elements/nested_element_spec.rb +254 -0
  254. data/spec/page-object/elements/option_spec.rb +11 -0
  255. data/spec/page-object/elements/ordered_list_spec.rb +94 -0
  256. data/spec/page-object/elements/paragraph_spec.rb +27 -0
  257. data/spec/page-object/elements/select_list_spec.rb +142 -0
  258. data/spec/page-object/elements/selenium/radio_button_spec.rb +44 -0
  259. data/spec/page-object/elements/selenium/text_field_spec.rb +49 -0
  260. data/spec/page-object/elements/selenium_element_spec.rb +172 -0
  261. data/spec/page-object/elements/span_spec.rb +26 -0
  262. data/spec/page-object/elements/table_cell_spec.rb +21 -0
  263. data/spec/page-object/elements/table_row_spec.rb +70 -0
  264. data/spec/page-object/elements/table_spec.rb +98 -0
  265. data/spec/page-object/elements/text_area_spec.rb +39 -0
  266. data/spec/page-object/elements/unordered_list_spec.rb +94 -0
  267. data/spec/page-object/elements/watir_element_spec.rb +141 -0
  268. data/spec/page-object/javascript_framework_facade_spec.rb +61 -0
  269. data/spec/page-object/loads_platform_spec.rb +53 -0
  270. data/spec/page-object/page-object_spec.rb +413 -0
  271. data/spec/page-object/page_factory_spec.rb +238 -0
  272. data/spec/page-object/page_populator_spec.rb +122 -0
  273. data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +68 -0
  274. data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
  275. data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +29 -0
  276. data/spec/page-object/platforms/watir_webdriver_spec.rb +9 -0
  277. data/spec/page-object/selenium_accessors_spec.rb +609 -0
  278. data/spec/page-object/watir_accessors_spec.rb +1134 -0
  279. data/spec/page-object/widget_spec.rb +226 -0
  280. data/spec/spec_helper.rb +44 -0
  281. metadata +430 -0
@@ -0,0 +1,82 @@
1
+ module PageObject
2
+ module Elements
3
+ class Table < Element
4
+ include Enumerable
5
+
6
+ def initialize(element, platform)
7
+ @element = element
8
+ include_platform_for platform
9
+ end
10
+
11
+ #
12
+ # iterator that yields with a PageObject::Elements::TableRow
13
+ #
14
+ # @return [PageObject::Elements::TableRow]
15
+ #
16
+ def each
17
+ for index in 1..self.rows do
18
+ yield self[index-1]
19
+ end
20
+ end
21
+
22
+ #
23
+ # return the first row
24
+ #
25
+ # @return PageObject::Elements::TableRow
26
+ #
27
+ def first_row
28
+ self[0]
29
+ end
30
+
31
+ #
32
+ # return the last row
33
+ #
34
+ # @return PageObject::Elements::TableRow
35
+ #
36
+ def last_row
37
+ self[-1]
38
+ end
39
+
40
+ #
41
+ # return the table as hashes
42
+ #
43
+ # @return Hash
44
+ #
45
+ def hashes
46
+ headers = self.first_row.map(&:text)
47
+ self.entries[1..-1].map do |row|
48
+ Hash[headers.zip(row.map(&:text))]
49
+ end
50
+ end
51
+
52
+ protected
53
+
54
+ def child_xpath
55
+ ".//child::tr"
56
+ end
57
+
58
+ def initialize_row(row_element, platform)
59
+ ::PageObject::Elements::TableRow.new(row_element, platform)
60
+ end
61
+
62
+
63
+ def include_platform_for platform
64
+ super
65
+ if platform[:platform] == :watir_webdriver
66
+ require 'page-object/platforms/watir_webdriver/table'
67
+ self.class.send :include, PageObject::Platforms::WatirWebDriver::Table
68
+ elsif platform[:platform] == :lds_watir_webdriver
69
+ require 'page-object/platforms/lds_watir_webdriver/table'
70
+ self.class.send :include, PageObject::Platforms::LdsWatirWebDriver::Table
71
+ elsif platform[:platform] == :selenium_webdriver
72
+ require 'page-object/platforms/selenium_webdriver/table'
73
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::Table
74
+ else
75
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
76
+ end
77
+ end
78
+ end
79
+
80
+ ::PageObject::Elements.tag_to_class[:table] = ::PageObject::Elements::Table
81
+ end
82
+ 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,53 @@
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] == :lds_watir_webdriver
40
+ require 'page-object/platforms/lds_watir_webdriver/table_row'
41
+ self.class.send :include, PageObject::Platforms::LdsWatirWebDriver::TableRow
42
+ elsif platform[:platform] == :selenium_webdriver
43
+ require 'page-object/platforms/selenium_webdriver/table_row'
44
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TableRow
45
+ else
46
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
47
+ end
48
+ end
49
+ end
50
+
51
+ ::PageObject::Elements.tag_to_class[:tr] = ::PageObject::Elements::TableRow
52
+ end
53
+ end
@@ -0,0 +1,41 @@
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] == :lds_watir_webdriver
27
+ require 'page-object/platforms/lds_watir_webdriver/text_area'
28
+ self.class.send :include, PageObject::Platforms::LdsWatirWebDriver::TextArea
29
+ elsif platform[:platform] == :selenium_webdriver
30
+ require 'page-object/platforms/selenium_webdriver/text_area'
31
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TextArea
32
+ else
33
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
34
+ end
35
+ end
36
+ end
37
+
38
+ ::PageObject::Elements.tag_to_class[:textarea] = ::PageObject::Elements::TextArea
39
+
40
+ end
41
+ end
@@ -0,0 +1,45 @@
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] == :lds_watir_webdriver
31
+ require 'page-object/platforms/lds_watir_webdriver/text_field'
32
+ self.class.send :include, PageObject::Platforms::LdsWatirWebDriver::TextField
33
+ elsif platform[:platform] == :selenium_webdriver
34
+ require 'page-object/platforms/selenium_webdriver/text_field'
35
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::TextField
36
+ else
37
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
38
+ end
39
+ end
40
+ end
41
+
42
+ ::PageObject::Elements.type_to_class[:text] = ::PageObject::Elements::TextField
43
+ ::PageObject::Elements.type_to_class[:password] = ::PageObject::Elements::TextField
44
+ end
45
+ end
@@ -0,0 +1,54 @@
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] == :lds_watir_webdriver
40
+ require 'page-object/platforms/lds_watir_webdriver/unordered_list'
41
+ self.class.send :include, PageObject::Platforms::LdsWatirWebDriver::UnorderedList
42
+ elsif platform[:platform] == :selenium_webdriver
43
+ require 'page-object/platforms/selenium_webdriver/unordered_list'
44
+ self.class.send :include, PageObject::Platforms::SeleniumWebDriver::UnorderedList
45
+ else
46
+ raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
47
+ end
48
+ end
49
+ end
50
+
51
+ ::PageObject::Elements.tag_to_class[:ul] = ::PageObject::Elements::UnorderedList
52
+
53
+ end
54
+ 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,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 AngularJS
5
+ #
6
+ # return the number of pending ajax requests
7
+ #
8
+ def self.pending_requests
9
+ 'return angular.element(document.body).injector().get(\'$http\').pendingRequests.length;'
10
+ end
11
+ end
12
+
13
+ end
14
+ 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
@@ -0,0 +1,80 @@
1
+ require 'page-object/javascript/jquery'
2
+ require 'page-object/javascript/prototype'
3
+ require 'page-object/javascript/yui'
4
+ require 'page-object/javascript/angularjs'
5
+
6
+
7
+ module PageObject
8
+ #
9
+ # Provide hooks into different common Javascript Frameworks.
10
+ # Currently this module only supports jQuery and Prototype but it
11
+ # has the ability for you to plug your own framework into it and
12
+ # therefore have it work with this gem. You do this by calling the
13
+ # #add_framework method. The module you provide must implement the
14
+ # necessary methods. Please look at the jQuery or Prototype
15
+ # implementations to determine the necessary methods
16
+ #
17
+ module JavascriptFrameworkFacade
18
+
19
+ class << self
20
+ #
21
+ # Set the framework to use.
22
+ #
23
+ # @param[Symbol] the framework to use. :jquery, :prototype, :yui,
24
+ # and :angularjs are supported
25
+ #
26
+ def framework=(framework)
27
+ initialize_script_builder unless @builder
28
+ raise unknown_framework(framework) unless @builder[framework]
29
+ @framework = framework
30
+ end
31
+
32
+ #
33
+ # Get the framework that will be used
34
+ #
35
+ def framework
36
+ @framework
37
+ end
38
+
39
+ #
40
+ # Add a framework and make it available to the system.
41
+ #
42
+ def add_framework(key, value)
43
+ raise invalid_framework unless value.respond_to? :pending_requests
44
+ initialize_script_builder unless @builder
45
+ @builder[key] = value
46
+ end
47
+
48
+ #
49
+ # get the javascript to determine number of pending requests
50
+ #
51
+ def pending_requests
52
+ script_builder.pending_requests
53
+ end
54
+
55
+ def script_builder
56
+ initialize_script_builder unless @builder
57
+ @builder[@framework]
58
+ end
59
+
60
+ private
61
+
62
+ def initialize_script_builder
63
+ @builder = {
64
+ :jquery => ::PageObject::Javascript::JQuery,
65
+ :prototype => ::PageObject::Javascript::Prototype,
66
+ :yui => ::PageObject::Javascript::YUI,
67
+ :angularjs => ::PageObject::Javascript::AngularJS
68
+ }
69
+ end
70
+
71
+ def unknown_framework(framework)
72
+ "You specified the Javascript framework #{framework} and it is unknow to the system"
73
+ end
74
+
75
+ def invalid_framework
76
+ "The Javascript framework you provided does not implement the necessary methods"
77
+ end
78
+ end
79
+ end
80
+ end