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,16 @@
1
+ module PageObject
2
+ module Platforms
3
+ module WatirWebDriver
4
+
5
+ module FileField
6
+
7
+ #
8
+ # Set the value of the FileField
9
+ #
10
+ def value=(new_value)
11
+ element.set(new_value)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module PageObject
2
+ module Platforms
3
+ module WatirWebDriver
4
+ module Form
5
+
6
+ #
7
+ # Submit the form.
8
+ #
9
+ def submit
10
+ element.submit
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ module PageObject
2
+ module Platforms
3
+ module WatirWebDriver
4
+ module Image
5
+
6
+ #
7
+ # Return the width of the image.
8
+ #
9
+ def width
10
+ element.width
11
+ end
12
+
13
+ #
14
+ # Return the height of the image
15
+ #
16
+ def height
17
+ element.height
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ module PageObject
2
+ module Platforms
3
+ module WatirWebDriver
4
+ module Link
5
+
6
+ #
7
+ # return the href for the link
8
+ #
9
+ def href
10
+ element.href
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,35 @@
1
+ module PageObject
2
+ module Platforms
3
+ module WatirWebDriver
4
+ module OrderedList
5
+
6
+ #
7
+ # Return the PageObject::Elements::ListItem for the index provided. Index
8
+ # is zero based.
9
+ #
10
+ # @return [PageObject::Elements::ListItem]
11
+ #
12
+ def [](idx)
13
+ Object::PageObject::Elements::ListItem.new(children[idx], :platform => :watir_webdriver)
14
+ end
15
+
16
+ #
17
+ # Return the number of items contained in the ordered list
18
+ #
19
+ def items
20
+ children.size
21
+ end
22
+
23
+ private
24
+
25
+ def children
26
+ list_items.find_all { |item| item.parent == element }
27
+ end
28
+
29
+ def list_items
30
+ element.ols(:xpath => child_xpath)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,1082 @@
1
+ require 'watir-webdriver/extensions/alerts'
2
+ require 'page-object/elements'
3
+ require 'page-object/core_ext/string'
4
+
5
+
6
+ module PageObject
7
+ module Platforms
8
+ module WatirWebDriver
9
+ #
10
+ # Watir implementation of the page object platform driver. You should not use the
11
+ # class directly. Instead you should include the PageObject module in your page object
12
+ # and use the methods dynamically added from the PageObject::Accessors module.
13
+ #
14
+ class PageObject
15
+ attr_reader :browser
16
+
17
+ def initialize(browser)
18
+ @browser = browser
19
+ end
20
+
21
+ #
22
+ # platform method to navigate to a provided url
23
+ # See PageObject#navigate_to
24
+ #
25
+ def navigate_to(url)
26
+ @browser.goto url
27
+ end
28
+
29
+ #
30
+ # platform method to get the current url
31
+ # See PageObject#current_url
32
+ #
33
+ def current_url
34
+ @browser.url
35
+ end
36
+
37
+ #
38
+ # platform method to retrieve the text from the current page
39
+ # See PageObject#text
40
+ #
41
+ def text
42
+ @browser.text
43
+ end
44
+
45
+ #
46
+ # platform method to retrieve the html for the current page
47
+ # See PageObject#html
48
+ #
49
+ def html
50
+ @browser.html
51
+ end
52
+
53
+ #
54
+ # platform method to retrieve the title for the current page
55
+ # See PageObject#title
56
+ #
57
+ def title
58
+ @browser.title
59
+ end
60
+
61
+ #
62
+ # platform method to wait for a block to return true
63
+ # See PageObject#wait_until
64
+ def wait_until(timeout, message = nil, &block)
65
+ @browser.wait_until(timeout, message, &block)
66
+ end
67
+
68
+ #
69
+ # platform method to handle an alert popup
70
+ # See PageObject#alert
71
+ #
72
+ def alert(frame=nil, &block)
73
+ switch_to_frame(frame)
74
+ yield
75
+ value = nil
76
+ if @browser.alert.exists?
77
+ value = @browser.alert.text
78
+ @browser.alert.ok
79
+ end
80
+ switch_to_default_content(frame)
81
+ value
82
+ end
83
+
84
+ #
85
+ # platform method to handle a confirm popup
86
+ # See PageObject#confirm
87
+ #
88
+ def confirm(response, frame=nil, &block)
89
+ switch_to_frame(frame)
90
+ yield
91
+ value = nil
92
+ if @browser.alert.exists?
93
+ value = @browser.alert.text
94
+ response ? @browser.alert.ok : @browser.alert.close
95
+ end
96
+ switch_to_default_content(frame)
97
+ value
98
+ end
99
+
100
+ #
101
+ # platform method to handle a prompt popup
102
+ # See PageObject#prompt
103
+ #
104
+ def prompt(answer, frame=nil, &block)
105
+ switch_to_frame(frame)
106
+ @browser.wd.execute_script "window.prompt = function(text, value) { window.__lastWatirPrompt = { message: text, default_value: value }; return #{answer}; }"
107
+ yield
108
+ result = @browser.wd.execute_script "return window.__lastWatirPrompt"
109
+ switch_to_default_content(frame)
110
+ result && result.dup.each_key { |k| result[k.to_sym] = result.delete(k) }
111
+ result
112
+ end
113
+
114
+ #
115
+ # platform method to execute javascript on the browser
116
+ # See PageObject#execute_script
117
+ #
118
+ def execute_script(script, *args)
119
+ @browser.execute_script(script, *args)
120
+ end
121
+
122
+ #
123
+ # platform method to handle attaching to a running window
124
+ # See PageObject#attach_to_window
125
+ #
126
+ def attach_to_window(identifier, &block)
127
+ win_id = {identifier.keys.first => /#{Regexp.escape(identifier.values.first)}/}
128
+ @browser.window(win_id).use &block
129
+ end
130
+
131
+ def element_with_focus
132
+ element = browser.execute_script("return document.activeElement")
133
+ type = element.type.to_sym if element.tag_name.to_sym == :input
134
+ cls = ::PageObject::Elements.element_class_for(element.tag_name, type)
135
+ cls.new(element, :platform => :watir_webdriver)
136
+ end
137
+
138
+ #
139
+ # platform method to switch to a frame and execute a block
140
+ # See PageObject#in_frame
141
+ #
142
+ def in_frame(identifier, frame=nil, &block)
143
+ frame = [] if frame.nil?
144
+ frame << {frame: identifier}
145
+ block.call(frame)
146
+ end
147
+
148
+ #
149
+ # platform method to switch to an iframe and execute a block
150
+ # See PageObject#in_frame
151
+ #
152
+ def in_iframe(identifier, frame=nil, &block)
153
+ frame = [] if frame.nil?
154
+ frame << {iframe: identifier}
155
+ block.call(frame)
156
+ end
157
+
158
+ #
159
+ # platform method to refresh the page
160
+ # See PageObject#refresh
161
+ #
162
+ def refresh
163
+ @browser.refresh
164
+ end
165
+
166
+ #
167
+ # platform method to go back to the previous page
168
+ # See PageObject#back
169
+ #
170
+ def back
171
+ @browser.back
172
+ end
173
+
174
+ #
175
+ # platform method to go forward to the next page
176
+ # See PageObject#forward
177
+ #
178
+ def forward
179
+ @browser.forward
180
+ end
181
+
182
+ #
183
+ # platform method to clear the cookies from the browser
184
+ # See PageObject#clear_cookies
185
+ #
186
+ def clear_cookies
187
+ @browser.cookies.clear
188
+ end
189
+
190
+ #
191
+ # platform method to save the current screenshot to a file
192
+ # See PageObject#save_screenshot
193
+ #
194
+ def save_screenshot(file_name)
195
+ @browser.wd.save_screenshot(file_name)
196
+ end
197
+
198
+ #
199
+ # platform method to get the value stored in a text field
200
+ # See PageObject::Accessors#text_field
201
+ #
202
+ def text_field_value_for(identifier)
203
+ process_watir_call("text_field(identifier).value", Elements::TextField, identifier)
204
+ end
205
+
206
+ #
207
+ # platform method to set the value for a text field
208
+ # See PageObject::Accessors#text_field
209
+ #
210
+ def text_field_value_set(identifier, value)
211
+ process_watir_call("text_field(identifier).set(value)", Elements::TextField, identifier, value)
212
+ end
213
+
214
+ #
215
+ # platform method to retrieve a text field element
216
+ # See PageObject::Accessors#text_field
217
+ #
218
+ def text_field_for(identifier)
219
+ find_watir_element("text_field(identifier)", Elements::TextField, identifier)
220
+ end
221
+
222
+ #
223
+ # platform method to retrieve an array of text field elements
224
+ #
225
+ def text_fields_for(identifier)
226
+ elements = find_watir_elements("text_fields(identifier)", Elements::TextField, identifier)
227
+ elements.select {|e| e.element.tag_name == 'input'}
228
+ end
229
+
230
+ #
231
+ # platform method to get the value stored in a hidden field
232
+ # See PageObject::Accessors#hidden_field
233
+ #
234
+ def hidden_field_value_for(identifier)
235
+ process_watir_call("hidden(identifier).value", Elements::HiddenField, identifier)
236
+ end
237
+
238
+ #
239
+ # platform method to retrieve a hidden field element
240
+ # See PageObject::Accessors#hidden_field
241
+ #
242
+ def hidden_field_for(identifier)
243
+ find_watir_element("hidden(identifier)", Elements::HiddenField, identifier)
244
+ end
245
+
246
+ #
247
+ # platform method to retrieve an array of hidden field elements
248
+ #
249
+ def hidden_fields_for(identifier)
250
+ find_watir_elements("hiddens(identifier)", Elements::HiddenField, identifier)
251
+ end
252
+
253
+ #
254
+ # platform method to set text in a textarea
255
+ # See PageObject::Accessors#text_area
256
+ #
257
+ def text_area_value_set(identifier, value)
258
+ process_watir_call("textarea(identifier).set(value)", Elements::TextArea,
259
+ identifier, value)
260
+ end
261
+
262
+ #
263
+ # platform method to get the text from a textarea
264
+ # See PageObject::Accessors#text_area
265
+ #
266
+ def text_area_value_for(identifier)
267
+ process_watir_call("textarea(identifier).value", Elements::TextArea, identifier)
268
+ end
269
+
270
+ #
271
+ # platform method to get the text area element
272
+ # See PageObject::Accessors#text_area
273
+ #
274
+ def text_area_for(identifier)
275
+ find_watir_element("textarea(identifier)", Elements::TextArea, identifier)
276
+ end
277
+
278
+ #
279
+ # platform method to retrieve an array of textarea elements
280
+ #
281
+ def text_areas_for(identifier)
282
+ find_watir_elements("textareas(identifier)", Elements::TextArea, identifier)
283
+ end
284
+
285
+ #
286
+ # platform method to get the currently selected value from a select list
287
+ # See PageObject::Accessors#select_list
288
+ #
289
+ def select_list_value_for(identifier)
290
+ process_watir_call("select_list(identifier).options.find {|o| o.selected?}.text",
291
+ Elements::SelectList, identifier)
292
+ end
293
+
294
+ #
295
+ # platform method to select a value from a select list
296
+ # See PageObject::Accessors#select_list
297
+ #
298
+ def select_list_value_set(identifier, value)
299
+ process_watir_call("select_list(identifier).select(value)", Elements::SelectList,
300
+ identifier, value)
301
+ end
302
+
303
+ #
304
+ # platform method to return the select list element
305
+ # See PageObject::Accessors#select_list
306
+ #
307
+ def select_list_for(identifier)
308
+ find_watir_element("select_list(identifier)", Elements::SelectList, identifier)
309
+ end
310
+
311
+ #
312
+ # platform method to retrieve an array of select_list elements
313
+ #
314
+ def select_lists_for(identifier)
315
+ find_watir_elements("select_lists(identifier)", Elements::SelectList, identifier)
316
+ end
317
+
318
+ #
319
+ # platform method to click a link
320
+ # See PageObject::Accessors#link
321
+ #
322
+ def click_link_for(identifier)
323
+ call = "link(identifier)"
324
+ process_watir_call("#{call}.click if identifier", Elements::Link, identifier)
325
+ end
326
+
327
+ #
328
+ # platform method to return a PageObject::Elements::Link object
329
+ # see PageObject::Accessors#link
330
+ #
331
+ def link_for(identifier)
332
+ call = "link(identifier)"
333
+ find_watir_element(call, Elements::Link, identifier)
334
+ end
335
+
336
+ #
337
+ # platform method to retrieve an array of link elements
338
+ #
339
+ def links_for(identifier)
340
+ call = "links(identifier)"
341
+ find_watir_elements(call, Elements::Link, identifier)
342
+ end
343
+
344
+ #
345
+ # platform method to check a checkbox
346
+ # See PageObject::Accessors#checkbox
347
+ #
348
+ def check_checkbox(identifier)
349
+ process_watir_call("checkbox(identifier).set", Elements::CheckBox, identifier)
350
+ end
351
+
352
+ #
353
+ # platform method to uncheck a checkbox
354
+ # See PageObject::Accessors#checkbox
355
+ #
356
+ def uncheck_checkbox(identifier)
357
+ process_watir_call("checkbox(identifier).clear", Elements::CheckBox, identifier)
358
+ end
359
+
360
+ #
361
+ # platform method to determine if a checkbox is checked
362
+ # See PageObject::Accessors#checkbox
363
+ #
364
+ def checkbox_checked?(identifier)
365
+ process_watir_call("checkbox(identifier).set?", Elements::CheckBox, identifier)
366
+ end
367
+
368
+ #
369
+ # platform method to return a PageObject::Elements::CheckBox element
370
+ # See PageObject::Accessors#checkbox
371
+ #
372
+ def checkbox_for(identifier)
373
+ find_watir_element("checkbox(identifier)", Elements::CheckBox, identifier)
374
+ end
375
+
376
+ #
377
+ # platform method to retrieve an array of checkbox elements
378
+ #
379
+ def checkboxs_for(identifier)
380
+ find_watir_elements("checkboxes(identifier)", Elements::CheckBox, identifier)
381
+ end
382
+
383
+ #
384
+ # platform method to select a radio button
385
+ # See PageObject::Accessors#radio_button
386
+ #
387
+ def select_radio(identifier)
388
+ process_watir_call("radio(identifier).set", Elements::RadioButton, identifier)
389
+ end
390
+
391
+ #
392
+ # platform method to determine if a radio button is selected
393
+ # See PageObject::Accessors#radio_button
394
+ #
395
+ def radio_selected?(identifier)
396
+ process_watir_call("radio(identifier).set?", Elements::RadioButton, identifier)
397
+ end
398
+
399
+ #
400
+ # platform method to return a PageObject::Eements::RadioButton element
401
+ # See PageObject::Accessors#radio_button
402
+ #
403
+ def radio_button_for(identifier)
404
+ find_watir_element("radio(identifier)", Elements::RadioButton, identifier)
405
+ end
406
+
407
+ #
408
+ # platform method to retrieve an array of radio button elements
409
+ #
410
+ def radio_buttons_for(identifier)
411
+ find_watir_elements("radios(identifier)", Elements::RadioButton, identifier)
412
+ end
413
+
414
+ #
415
+ # platform method to return the text for a div
416
+ # See PageObject::Accessors#div
417
+ #
418
+ def div_text_for(identifier)
419
+ process_watir_call("div(identifier).text", Elements::Div, identifier, nil, 'div')
420
+ end
421
+
422
+ #
423
+ # platform method to return a PageObject::Elements::Div element
424
+ # See PageObject::Accessors#div
425
+ #
426
+ def div_for(identifier)
427
+ find_watir_element("div(identifier)", Elements::Div, identifier, 'div')
428
+ end
429
+
430
+ #
431
+ # platform method to retrieve an array of div elements
432
+ #
433
+ def divs_for(identifier)
434
+ find_watir_elements("divs(identifier)", Elements::Div, identifier, 'div')
435
+ end
436
+
437
+ #
438
+ # platform method to return the text for a span
439
+ # See PageObject::Accessors#span
440
+ #
441
+ def span_text_for(identifier)
442
+ process_watir_call("span(identifier).text", Elements::Span, identifier, nil, 'span')
443
+ end
444
+
445
+ #
446
+ # platform method to return a PageObject::Elements::Span element
447
+ # See PageObject::Accessors#span
448
+ #
449
+ def span_for(identifier)
450
+ find_watir_element("span(identifier)", Elements::Span, identifier, 'span')
451
+ end
452
+
453
+ #
454
+ # platform method to retrieve an array of span elements
455
+ #
456
+ def spans_for(identifier)
457
+ find_watir_elements("spans(identifier)", Elements::Span, identifier, 'span')
458
+ end
459
+
460
+ #
461
+ # platform method to click a button
462
+ # See PageObject::Accessors#button
463
+ #
464
+ def click_button_for(identifier)
465
+ call = "button(identifier)"
466
+ process_watir_call("#{call}.click", Elements::Button, identifier)
467
+ end
468
+
469
+ #
470
+ # platform method to retrieve a button element
471
+ # See PageObject::Accessors#button
472
+ #
473
+ def button_for(identifier)
474
+ call = "button(identifier)"
475
+ find_watir_element(call, Elements::Button, identifier)
476
+ end
477
+
478
+ #
479
+ # platform method to retrieve an array of button elements
480
+ #
481
+ def buttons_for(identifier)
482
+ call = "buttons(identifier)"
483
+ find_watir_elements(call, Elements::Button, identifier)
484
+ end
485
+
486
+ #
487
+ # platform method to return the text for a table
488
+ # See PageObject::Accessors#table
489
+ #
490
+ def table_text_for(identifier)
491
+ process_watir_call("table(identifier).text", Elements::Table, identifier, nil, 'table')
492
+ end
493
+
494
+ #
495
+ # platform method to retrieve a table element
496
+ # See PageObject::Accessors#table
497
+ #
498
+ def table_for(identifier)
499
+ find_watir_element("table(identifier)", Elements::Table, identifier, 'table')
500
+ end
501
+
502
+ #
503
+ # platform method to retrieve an array of table elements
504
+ #
505
+ def tables_for(identifier)
506
+ find_watir_elements("tables(identifier)", Elements::Table, identifier, 'table')
507
+ end
508
+
509
+ #
510
+ # platform method to retrieve the text from a table cell
511
+ # See PageObject::Accessors#cell
512
+ #
513
+ def cell_text_for(identifier)
514
+ process_watir_call("td(identifier).text", Elements::TableCell, identifier,
515
+ nil, 'td')
516
+ end
517
+
518
+ #
519
+ # platform method to retrieve a table cell element
520
+ # See PageObject::Accessors#cell
521
+ #
522
+ def cell_for(identifier)
523
+ find_watir_element("td(identifier)", Elements::TableCell, identifier, 'td')
524
+ end
525
+
526
+ #
527
+ # platform method to retrieve an array of table cell elements
528
+ #
529
+ def cells_for(identifier)
530
+ find_watir_elements("tds(identifier)", Elements::TableCell, identifier, 'td')
531
+ end
532
+
533
+ #
534
+ # platform method to retrieve the text from a table row
535
+ # See PageObject::Accessors#row
536
+ #
537
+ def row_text_for(identifier)
538
+ process_watir_call("tr(identifier).text", Elements::TableRow, identifier,
539
+ nil, 'tr')
540
+ end
541
+
542
+ #
543
+ # platform method to retrieve a table row element
544
+ # See PageObject::Accessors#row
545
+ #
546
+ def row_for(identifier)
547
+ find_watir_element("tr(identifier)", Elements::TableRow, identifier, 'tr')
548
+ end
549
+
550
+ #
551
+ # platform method to retrieve an array of table row elements
552
+ #
553
+ def rows_for(identifier)
554
+ find_watir_elements("trs(identifier)", Elements::TableRow, identifier, 'tr')
555
+ end
556
+
557
+ #
558
+ # platform method to retrieve an image element
559
+ # See PageObject::Accessors#image
560
+ #
561
+ def image_for(identifier)
562
+ find_watir_element("image(identifier)", Elements::Image, identifier)
563
+ end
564
+
565
+ #
566
+ # platform method to retrieve an array of image elements
567
+ #
568
+ def images_for(identifier)
569
+ find_watir_elements("images(identifier)", Elements::Image, identifier)
570
+ end
571
+
572
+ #
573
+ # platform method to retrieve a form element
574
+ # See PageObject::Accessors#form
575
+ #
576
+ def form_for(identifier)
577
+ find_watir_element("form(identifier)", Elements::Form, identifier)
578
+ end
579
+
580
+ #
581
+ # platform method to retrieve an array of forms
582
+ #
583
+ def forms_for(identifier)
584
+ find_watir_elements("forms(identifier)", Elements::Form, identifier)
585
+ end
586
+
587
+ #
588
+ # platform method to retrieve the text from a list item
589
+ # See PageObject::Accessors#list_item
590
+ #
591
+ def list_item_text_for(identifier)
592
+ process_watir_call("li(identifier).text", Elements::ListItem, identifier, nil, 'li')
593
+ end
594
+
595
+ #
596
+ # platform method to retrieve a list item element
597
+ # See PageObject::Accessors#list_item
598
+ #
599
+ def list_item_for(identifier)
600
+ find_watir_element("li(identifier)", Elements::ListItem, identifier, 'li')
601
+ end
602
+
603
+ #
604
+ # platform method to retrieve an array of list items
605
+ #
606
+ def list_items_for(identifier)
607
+ find_watir_elements("lis(identifier)", Elements::ListItem, identifier, 'li')
608
+ end
609
+
610
+ #
611
+ # platform method to retrieve the text from an unordered list
612
+ # See PageObject::Accessors#unordered_list
613
+ #
614
+ def unordered_list_text_for(identifier)
615
+ process_watir_call("ul(identifier).text", Elements::UnorderedList, identifier, nil, 'ul')
616
+ end
617
+
618
+ #
619
+ # platform method to retrieve an unordered list element
620
+ # See PageObject::Accessors#unordered_list
621
+ #
622
+ def unordered_list_for(identifier)
623
+ find_watir_element("ul(identifier)", Elements::UnorderedList, identifier, 'ul')
624
+ end
625
+
626
+ #
627
+ # platform method to retrieve an array of unordered lists
628
+ #
629
+ def unordered_lists_for(identifier)
630
+ find_watir_elements("uls(identifier)", Elements::UnorderedList, identifier, 'ul')
631
+ end
632
+
633
+ #
634
+ # platform method to retrieve the text from an ordered list
635
+ # See PageObject::Accessors#ordered_list
636
+ #
637
+ def ordered_list_text_for(identifier)
638
+ process_watir_call("ol(identifier).text", Elements::OrderedList, identifier, nil, 'ol')
639
+ end
640
+
641
+ #
642
+ # platform method to retrieve an ordered list element
643
+ # See PageObject::Accessors#ordered_list
644
+ #
645
+ def ordered_list_for(identifier)
646
+ find_watir_element("ol(identifier)", Elements::OrderedList, identifier, 'ol')
647
+ end
648
+
649
+ #
650
+ # platform method to retrieve an array of ordered lists
651
+ #
652
+ def ordered_lists_for(identifier)
653
+ find_watir_elements("ols(identifier)", Elements::OrderedList, identifier, 'ol')
654
+ end
655
+
656
+ #
657
+ # platform method to retrieve the text for a h1
658
+ # See PageObject::Accessors#h1
659
+ #
660
+ def h1_text_for(identifier)
661
+ process_watir_call("h1(identifier).text", Elements::Heading, identifier, nil, 'h1')
662
+ end
663
+
664
+ #
665
+ # platform method to retrieve the h1 element
666
+ # See PageObject::Accessors#h1
667
+ #
668
+ def h1_for(identifier)
669
+ find_watir_element("h1(identifier)", Elements::Heading, identifier, 'h1')
670
+ end
671
+
672
+ #
673
+ # platform method to retrieve an array of h1s
674
+ #
675
+ def h1s_for(identifier)
676
+ find_watir_elements("h1s(identifier)", Elements::Heading, identifier, 'h1')
677
+ end
678
+
679
+ #
680
+ # platform method to retrieve the text for a h2
681
+ # See PageObject::Accessors#h2
682
+ #
683
+ def h2_text_for(identifier)
684
+ process_watir_call("h2(identifier).text", Elements::Heading, identifier, nil, 'h2')
685
+ end
686
+
687
+ #
688
+ # platform method to retrieve the h2 element
689
+ # See PageObject::Accessors#h2
690
+ #
691
+ def h2_for(identifier)
692
+ find_watir_element("h2(identifier)", Elements::Heading, identifier, 'h2')
693
+ end
694
+
695
+ #
696
+ # platform method to retrieve an array of h2s
697
+ #
698
+ def h2s_for(identifier)
699
+ find_watir_elements("h2s(identifier)", Elements::Heading, identifier, 'h2')
700
+ end
701
+
702
+ #
703
+ # platform method to retrieve the text for a h3
704
+ # See PageObject::Accessors#h3
705
+ #
706
+ def h3_text_for(identifier)
707
+ process_watir_call("h3(identifier).text", Elements::Heading, identifier, nil, 'h3')
708
+ end
709
+
710
+ #
711
+ # platform method to retrieve the h3 element
712
+ # See PageObject::Accessors#h3
713
+ #
714
+ def h3_for(identifier)
715
+ find_watir_element("h3(identifier)", Elements::Heading, identifier, 'h3')
716
+ end
717
+
718
+ #
719
+ # platform method to retrieve an array of h3s
720
+ #
721
+ def h3s_for(identifier)
722
+ find_watir_elements("h3s(identifier)", Elements::Heading, identifier, 'h3')
723
+ end
724
+
725
+ #
726
+ # platform method to retrieve the text for a h4
727
+ # See PageObject::Accessors#h4
728
+ #
729
+ def h4_text_for(identifier)
730
+ process_watir_call("h4(identifier).text", Elements::Heading, identifier, nil, 'h4')
731
+ end
732
+
733
+ #
734
+ # platform method to retrieve the h4 element
735
+ # See PageObject::Accessors#h4
736
+ #
737
+ def h4_for(identifier)
738
+ find_watir_element("h4(identifier)", Elements::Heading, identifier, 'h4')
739
+ end
740
+
741
+ #
742
+ # platform method to retrieve an array of h4s
743
+ #
744
+ def h4s_for(identifier)
745
+ find_watir_elements("h4s(identifier)", Elements::Heading, identifier, 'h4')
746
+ end
747
+
748
+ #
749
+ # platform method to retrieve the text for a h5
750
+ # See PageObject::Accessors#h5
751
+ #
752
+ def h5_text_for(identifier)
753
+ process_watir_call("h5(identifier).text", Elements::Heading, identifier, nil, 'h5')
754
+ end
755
+
756
+ #
757
+ # platform method to retrieve the h5 element
758
+ # See PageObject::Accessors#h5
759
+ #
760
+ def h5_for(identifier)
761
+ find_watir_element("h5(identifier)", Elements::Heading, identifier, 'h5')
762
+ end
763
+
764
+ #
765
+ # platform method to retrieve an array of h5s
766
+ #
767
+ def h5s_for(identifier)
768
+ find_watir_elements("h5s(identifier)", Elements::Heading, identifier, 'h5')
769
+ end
770
+
771
+ #
772
+ # platform method to retrieve the text for a h6
773
+ # See PageObject::Accessors#h6
774
+ #
775
+ def h6_text_for(identifier)
776
+ process_watir_call("h6(identifier).text", Elements::Heading, identifier, nil, 'h6')
777
+ end
778
+
779
+ #
780
+ # platform method to retrieve the h6 element
781
+ # See PageObject::Accessors#h6
782
+ #
783
+ def h6_for(identifier)
784
+ find_watir_element("h6(identifier)", Elements::Heading, identifier, 'h6')
785
+ end
786
+
787
+ #
788
+ # platform method to retrieve an array of h6s
789
+ #
790
+ def h6s_for(identifier)
791
+ find_watir_elements("h6s(identifier)", Elements::Heading, identifier, 'h6')
792
+ end
793
+
794
+ #
795
+ # platform method to retrieve the text for a paragraph
796
+ # See PageObject::Accessors#paragraph
797
+ #
798
+ def paragraph_text_for(identifier)
799
+ process_watir_call("p(identifier).text", Elements::Paragraph, identifier, nil, 'p')
800
+ end
801
+
802
+ #
803
+ # platform method to retrieve the paragraph element
804
+ # See PageObject::Accessors#paragraph
805
+ #
806
+ def paragraph_for(identifier)
807
+ find_watir_element("p(identifier)", Elements::Paragraph, identifier, 'p')
808
+ end
809
+
810
+ #
811
+ # platform method to retrieve an array of paragraph elements
812
+ #
813
+ def paragraphs_for(identifier)
814
+ find_watir_elements("ps(identifier)", Elements::Paragraph, identifier, 'p')
815
+ end
816
+
817
+ #
818
+ # platform method to return the text for a label
819
+ # See PageObject::Accessors#label
820
+ #
821
+ def label_text_for(identifier)
822
+ process_watir_call("label(identifier).text", Elements::Label, identifier, nil, 'label')
823
+ end
824
+
825
+ #
826
+ # platform method to return a PageObject::Elements::Label element
827
+ # See PageObject::Accessors#label
828
+ #
829
+ def label_for(identifier)
830
+ find_watir_element("label(identifier)", Elements::Label, identifier, 'label')
831
+ end
832
+
833
+ #
834
+ #
835
+ # platform method to retrieve an array of label elements
836
+ #
837
+ def labels_for(identifier)
838
+ find_watir_elements("labels(identifier)", Elements::Label, identifier, 'label')
839
+ end
840
+
841
+ #
842
+ # platform method to set the file on a file_field element
843
+ # See PageObject::Accessors#file_field
844
+ #
845
+ def file_field_value_set(identifier, value)
846
+ process_watir_call("file_field(identifier).set(value)", Elements::FileField,
847
+ identifier, value)
848
+ end
849
+
850
+ #
851
+ # platform method to retrieve a file_field element
852
+ # See PageObject::Accessors#file_field
853
+ #
854
+ def file_field_for(identifier)
855
+ find_watir_element("file_field(identifier)", Elements::FileField, identifier)
856
+ end
857
+
858
+ #
859
+ # platform method to retrieve an array of file field elements
860
+ #
861
+ def file_fields_for(identifier)
862
+ find_watir_elements("file_fields(identifier)", Elements::FileField, identifier)
863
+ end
864
+
865
+ #
866
+ # platform method to click on an area
867
+ #
868
+ def click_area_for(identifier)
869
+ process_watir_call("area(identifier).click", Elements::Area, identifier, nil, 'area')
870
+ end
871
+
872
+ #
873
+ # platform method to retrieve an area element
874
+ #
875
+ def area_for(identifier)
876
+ find_watir_element("area(identifier)", Elements::Area, identifier, 'area')
877
+ end
878
+
879
+ #
880
+ # platform method to retrieve an array of area elements
881
+ #
882
+ def areas_for(identifier)
883
+ find_watir_elements("areas(identifier)", Elements::Area, identifier, 'area')
884
+ end
885
+
886
+ #
887
+ # platform method to retrieve a canvas element
888
+ #
889
+ def canvas_for(identifier)
890
+ find_watir_element("canvas(identifier)", Elements::Canvas, identifier, 'canvas')
891
+ end
892
+
893
+ #
894
+ # platform method to retrieve an array of canvas elements
895
+ #
896
+ def canvass_for(identifier)
897
+ find_watir_elements("canvases(identifier)", Elements::Canvas, identifier, 'canvas')
898
+ end
899
+
900
+ #
901
+ # platform method to retrieve an audio element
902
+ #
903
+ def audio_for(identifier)
904
+ find_watir_element("audio(identifier)", Elements::Audio, identifier, 'audio')
905
+ end
906
+
907
+ #
908
+ # platform method to retrieve an array of audio elements
909
+ #
910
+ def audios_for(identifier)
911
+ find_watir_elements("audios(identifier)", Elements::Audio, identifier, 'audio')
912
+ end
913
+
914
+ #
915
+ # platform method to retrieve a video element
916
+ #
917
+ def video_for(identifier)
918
+ find_watir_element("video(identifier)", Elements::Video, identifier, 'video')
919
+ end
920
+
921
+ #
922
+ # platform method to retrieve an array of video elements
923
+ #
924
+ def videos_for(identifier)
925
+ find_watir_elements("videos(identifier)", Elements::Video, identifier, 'video')
926
+ end
927
+
928
+ #
929
+ # platform method to return a PageObject::Elements::Element element
930
+ # See PageObject::Accessors#element
931
+ #
932
+ def element_for(tag, identifier)
933
+ find_watir_element("#{tag.to_s}(identifier)", Elements::Element, identifier, tag.to_s)
934
+ end
935
+
936
+ #
937
+ # platform method to return an array of PageObject::Elements::Element elements
938
+ # See PageObject::Accessors#element
939
+ #
940
+ def elements_for(tag, identifier)
941
+ find_watir_elements("#{tag.to_s}s(identifier)", Elements::Element, identifier, tag.to_s)
942
+ end
943
+
944
+ #
945
+ # platform method to return a PageObject rooted at an element
946
+ # See PageObject::Accessors#page_section
947
+ #
948
+ def page_for(identifier, page_class)
949
+ find_watir_page(identifier, page_class)
950
+ end
951
+
952
+ #
953
+ # platform method to return a collection of PageObjects rooted at elements
954
+ # See PageObject::Accessors#page_sections
955
+ #
956
+ def pages_for(identifier, page_class)
957
+ SectionCollection.new(find_watir_pages(identifier, page_class))
958
+ end
959
+
960
+ #
961
+ # platform method to return a svg element
962
+ #
963
+ def svg_for(identifier)
964
+ find_watir_element("element(identifier)", Elements::Element, identifier)
965
+ end
966
+
967
+ #
968
+ # platform method to return an array of svg elements
969
+ #
970
+ def svgs_for(identifier)
971
+ find_watir_elements("element(identifier)", Elements::Element, identifier)
972
+ end
973
+
974
+ #
975
+ # platform method to retrieve the text for a b
976
+ # See PageObject::Accessors#b
977
+ #
978
+ def b_text_for(identifier)
979
+ process_watir_call("b(identifier).text", Elements::Bold, identifier, nil, 'b')
980
+ end
981
+
982
+ #
983
+ # platform method to retrieve the b element
984
+ # See PageObject::Accessors#h1
985
+ #
986
+ def b_for(identifier)
987
+ find_watir_element("b(identifier)", Elements::Bold, identifier, 'b')
988
+ end
989
+
990
+ #
991
+ # platform method to retrieve an array of bs
992
+ #
993
+ def bs_for(identifier)
994
+ find_watir_elements("bs(identifier)", Elements::Bold, identifier, 'b')
995
+ end
996
+
997
+ private
998
+
999
+ def find_watir_elements(the_call, type, identifier, tag_name=nil)
1000
+ identifier, frame_identifiers = parse_identifiers(identifier, type, tag_name)
1001
+ elements = @browser.instance_eval "#{nested_frames(frame_identifiers)}#{the_call}"
1002
+ switch_to_default_content(frame_identifiers)
1003
+ elements.map { |element| type.new(element, :platform => :watir_webdriver) }
1004
+ end
1005
+
1006
+ def find_watir_element(the_call, type, identifier, tag_name=nil)
1007
+ identifier, frame_identifiers = parse_identifiers(identifier, type, tag_name)
1008
+ element = @browser.instance_eval "#{nested_frames(frame_identifiers)}#{the_call}"
1009
+ switch_to_default_content(frame_identifiers)
1010
+ type.new(element, :platform => :watir_webdriver)
1011
+ end
1012
+
1013
+ def find_watir_pages(identifier, page_class)
1014
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Element, 'element')
1015
+ elements = @browser.instance_eval "#{nested_frames(frame_identifiers)}elements(identifier)"
1016
+ switch_to_default_content(frame_identifiers)
1017
+ elements.map { |element| page_class.new(element) }
1018
+ end
1019
+
1020
+ def find_watir_page(identifier, page_class)
1021
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Element, 'element')
1022
+ element = @browser.instance_eval "#{nested_frames(frame_identifiers)}element(identifier)"
1023
+ switch_to_default_content(frame_identifiers)
1024
+ page_class.new(element)
1025
+ end
1026
+
1027
+ def process_watir_call(the_call, type, identifier, value=nil, tag_name=nil)
1028
+ identifier, frame_identifiers = parse_identifiers(identifier, type, tag_name)
1029
+ value = @browser.instance_eval "#{nested_frames(frame_identifiers)}#{the_call}"
1030
+ switch_to_default_content(frame_identifiers)
1031
+ value
1032
+ end
1033
+
1034
+ def parse_identifiers(identifier, element, tag_name=nil)
1035
+ frame_identifiers = identifier.delete(:frame)
1036
+ identifier = add_tagname_if_needed identifier, tag_name if tag_name
1037
+ identifier = element.watir_identifier_for identifier
1038
+ return identifier, frame_identifiers
1039
+ end
1040
+
1041
+ def add_tagname_if_needed identifier, tag
1042
+ return identifier if identifier.length < 2 and not identifier[:name]
1043
+ identifier[:tag_name] = tag if identifier[:name]
1044
+ identifier
1045
+ end
1046
+
1047
+ def nested_frames(frame_identifiers)
1048
+ return if frame_identifiers.nil?
1049
+ frame_str = ''
1050
+ frame_identifiers.each do |frame|
1051
+ type = frame.keys.first
1052
+ identifier = frame.values.first.map do |key, value|
1053
+ if value.is_a?(Regexp)
1054
+ ":#{key} => #{value.inspect}"
1055
+ elsif value.to_s.is_integer
1056
+ ":#{key} => #{value}"
1057
+ else
1058
+ ":#{key} => '#{value}'"
1059
+ end
1060
+ end.join(', ')
1061
+ frame_str += "#{type.to_s}(#{identifier})."
1062
+ end
1063
+ frame_str
1064
+ end
1065
+
1066
+ def switch_to_default_content(frame_identifiers)
1067
+ @browser.wd.switch_to.default_content unless frame_identifiers.nil?
1068
+ end
1069
+
1070
+ def switch_to_frame(frame_identifiers)
1071
+ unless frame_identifiers.nil?
1072
+ frame_identifiers.each do |frame|
1073
+ frame_id = frame.values.first
1074
+ value = frame_id.values.first
1075
+ @browser.wd.switch_to.frame(value)
1076
+ end
1077
+ end
1078
+ end
1079
+ end
1080
+ end
1081
+ end
1082
+ end