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,291 @@
1
+ require 'watir-webdriver/atoms'
2
+
3
+ module PageObject
4
+ module Platforms
5
+ #
6
+ # Selenium implementation of the common functionality found across all elements
7
+ #
8
+ module SeleniumWebDriver
9
+ module Element
10
+ include Watir::Atoms
11
+
12
+ #
13
+ # return true if an element is visible
14
+ #
15
+ def visible?
16
+ element.displayed?
17
+ end
18
+
19
+ #
20
+ # return true if an element exists
21
+ #
22
+ def exists?
23
+ not element.nil?
24
+ end
25
+
26
+ #
27
+ # flash the element by temporarily changing the background color
28
+ #
29
+ def flash
30
+ original_color = attribute('backgroundColor')
31
+ the_bridge = bridge
32
+ 10.times do |n|
33
+ color = (n % 2 == 0) ? 'red' : original_color
34
+ the_bridge.executeScript("arguments[0].style.backgroundColor = '#{color}'", element)
35
+ end
36
+ end
37
+
38
+ #
39
+ # Get the text for the element
40
+ #
41
+ # @return [String]
42
+ #
43
+ def text
44
+ element.text
45
+ end
46
+
47
+ #
48
+ # Get the html for the element
49
+ #
50
+ # @return [String]
51
+ #
52
+ def html
53
+ script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:getOuterHtml)
54
+ bridge.executeScript(script, element).strip
55
+ end
56
+
57
+ #
58
+ # Get the value of this element
59
+ #
60
+ # @return [String]
61
+ #
62
+ def value
63
+ element.attribute('value')
64
+ end
65
+
66
+ #
67
+ # compare this element to another to determine if they are equal
68
+ #
69
+ def ==(other)
70
+ element == other.element
71
+ end
72
+
73
+ #
74
+ # Get the tag name of this element
75
+ #
76
+ # @return [String]
77
+ #
78
+ def tag_name
79
+ element.tag_name
80
+ end
81
+
82
+ #
83
+ # Get the value of a the given attribute of the element. Will
84
+ # return the current value, even if this has been modified
85
+ # after the page has been loaded. More exactly, this method
86
+ # will return the value of the given attribute, unless that
87
+ # attribute is not present, in which case the value of the
88
+ # property with the same name is returned. If neither value is
89
+ # set, nil is returned. The "style" attribute is converted as
90
+ # best can be to a text representation with a trailing
91
+ # semi-colon. The following are deemed to be "boolean"
92
+ # attributes, and will return either "true" or "false":
93
+ #
94
+ # async, autofocus, autoplay, checked, compact, complete,
95
+ # controls, declare, defaultchecked, defaultselected, defer,
96
+ # disabled, draggable, ended, formnovalidate, hidden, indeterminate,
97
+ # iscontenteditable, ismap, itemscope, loop, multiple, muted,
98
+ # nohref, noresize, noshade, novalidate, nowrap, open, paused,
99
+ # pubdate, readonly, required, reversed, scoped, seamless, seeking,
100
+ # selected, spellcheck, truespeed, willvalidate
101
+ #
102
+ # Finally, the following commonly mis-capitalized
103
+ # attribute/property names are evaluated as expected:
104
+ #
105
+ # class, readonly
106
+ #
107
+ # @param [String]
108
+ # attribute name
109
+ # @return [String,nil]
110
+ # attribute value
111
+ #
112
+ def attribute(attribute_name)
113
+ element.attribute attribute_name
114
+ end
115
+
116
+ #
117
+ # Fire the provided event on the current element
118
+ #
119
+ def fire_event(event_name)
120
+ event_name = event_name.to_s.sub(/^on/, '').downcase
121
+ script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:fireEvent)
122
+ bridge.executeScript(script, element, event_name)
123
+ end
124
+
125
+ #
126
+ # hover over the element
127
+ #
128
+ def hover
129
+ mouse = Selenium::WebDriver::Mouse.new(bridge)
130
+ mouse.move_to(element)
131
+ end
132
+
133
+ #
134
+ # hover over the element
135
+ #
136
+ def double_click
137
+ mouse = Selenium::WebDriver::Mouse.new(bridge)
138
+ mouse.double_click(element)
139
+ end
140
+
141
+ #
142
+ # find the parent element
143
+ #
144
+ def parent
145
+ script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:getParentElement)
146
+ parent = bridge.executeScript(script, element)
147
+ type = element.attribute(:type).to_s.downcase if parent.tag_name.to_sym == :input
148
+ cls = ::PageObject::Elements.element_class_for(parent.tag_name, type)
149
+ cls.new(parent, :platform => :selenium_webdriver)
150
+ end
151
+
152
+ #
153
+ # Set the focus to the current element
154
+ #
155
+ def focus
156
+ bridge.executeScript("return arguments[0].focus()", element)
157
+ end
158
+
159
+ #
160
+ # Select the provided text
161
+ #
162
+ def select_text(text)
163
+ Watir::Atoms.load(:selectText)
164
+ script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:selectText)
165
+ bridge.executeScript(script, element, text)
166
+ end
167
+
168
+ #
169
+ # Click this element
170
+ #
171
+ def right_click
172
+ element.context_click
173
+ end
174
+
175
+ #
176
+ # Waits until the element is present
177
+ #
178
+ # @param [Integer] (defaults to: 5) seconds to wait before timing out
179
+ #
180
+ def when_present(timeout=::PageObject.default_element_wait)
181
+ wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element not present in #{timeout} seconds"})
182
+ wait.until do
183
+ self.exists?
184
+ end
185
+ self
186
+ end
187
+
188
+ #
189
+ # Waits until the element is not present
190
+ #
191
+ # @param [Integer] (defaults to: 5) seconds to wait before
192
+ # timing out
193
+ #
194
+ def when_not_present(timeout=::PageObject.default_element_wait)
195
+ wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element still present in #{timeout} seconds"})
196
+ wait.until do
197
+ not_present = false
198
+ begin
199
+ not_present = false if element and element.displayed?
200
+ rescue Selenium::WebDriver::Error::ObsoleteElementError
201
+ not_present = true
202
+ end
203
+ not_present
204
+ end
205
+ end
206
+
207
+ #
208
+ # Waits until the element is visible
209
+ #
210
+ # @param [Integer] (defaults to: 5) seconds to wait before timing out
211
+ #
212
+ def when_visible(timeout=::PageObject.default_element_wait)
213
+ wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element not visible in #{timeout} seconds"})
214
+ wait.until do
215
+ self.visible?
216
+ end
217
+ self
218
+ end
219
+
220
+ #
221
+ # Waits until the element is not visible
222
+ #
223
+ # @param [Integer] (defaults to: 5) seconds to wait before timing out
224
+ #
225
+ def when_not_visible(timeout=::PageObject.default_element_wait)
226
+ wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => "Element still visible in #{timeout} seconds"})
227
+ wait.until do
228
+ not self.visible?
229
+ end
230
+ self
231
+ end
232
+
233
+ #
234
+ # Waits until the block returns true
235
+ #
236
+ # @param [Integer] (defaults to: 5) seconds to wait before timing out
237
+ # @param [String] the message to display if the event timeouts
238
+ # @param the block to execute when the event occurs
239
+ #
240
+ def wait_until(timeout=::PageObject.default_element_wait, message=nil, &block)
241
+ wait = Object::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => message})
242
+ wait.until &block
243
+ end
244
+
245
+ #
246
+ # Send keystrokes to this element
247
+ #
248
+ # @param [String, Symbol, Array]
249
+ #
250
+ # Examples:
251
+ #
252
+ # element.send_keys "foo" #=> value: 'foo'
253
+ # element.send_keys "tet", :arrow_left, "s" #=> value: 'test'
254
+ # element.send_keys [:control, 'a'], :space #=> value: ' '
255
+ #
256
+ # @see Selenium::WebDriver::Keys::KEYS
257
+ #
258
+ def send_keys(*args)
259
+ element.send_keys(*args)
260
+ end
261
+
262
+ #
263
+ # clear the contents of the element
264
+ #
265
+ def clear
266
+ element.clear
267
+ end
268
+
269
+ #
270
+ # get the id of the element
271
+ #
272
+ def id
273
+ attribute(:id)
274
+ end
275
+
276
+ #
277
+ # Scroll until the element is viewable
278
+ #
279
+ def scroll_into_view
280
+ element.location_once_scrolled_into_view
281
+ end
282
+
283
+ private
284
+
285
+ def bridge
286
+ bridge = element.instance_variable_get(:@bridge)
287
+ end
288
+ end
289
+ end
290
+ end
291
+ end
@@ -0,0 +1,16 @@
1
+ module PageObject
2
+ module Platforms
3
+ module SeleniumWebDriver
4
+
5
+ module FileField
6
+
7
+ #
8
+ # Set the value of the FileField
9
+ #
10
+ def value=(new_value)
11
+ element.send_keys(new_value)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module PageObject
2
+ module Platforms
3
+ module SeleniumWebDriver
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,28 @@
1
+ module PageObject
2
+ module Platforms
3
+ module SeleniumWebDriver
4
+ module Image
5
+
6
+ #
7
+ # Return the width of the image.
8
+ #
9
+ def width
10
+ dimension.width
11
+ end
12
+
13
+ #
14
+ # Return the height of the image
15
+ #
16
+ def height
17
+ dimension.height
18
+ end
19
+
20
+ private
21
+
22
+ def dimension
23
+ element.size
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ module PageObject
2
+ module Platforms
3
+ module SeleniumWebDriver
4
+ module Label
5
+
6
+ #
7
+ # choose the label
8
+ #
9
+ def choose
10
+ element.click
11
+ wait_for_ajax
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ module PageObject
2
+ module Platforms
3
+ module SeleniumWebDriver
4
+ module Link
5
+ #
6
+ # Override PageObject::PLatforms::SeleniumElement#value because
7
+ # #value is not available on links in Selenium.
8
+ #
9
+ def value
10
+ raise "value not available on link element with Selenium"
11
+ end
12
+
13
+ #
14
+ # return the href for the link
15
+ #
16
+ def href
17
+ attribute('href')
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,39 @@
1
+ module PageObject
2
+ module Platforms
3
+ module SeleniumWebDriver
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
+ children[idx]
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
+ items = list_items.map do |item|
27
+ ::PageObject::Elements::ListItem.new(item, :platform => :selenium_webdriver)
28
+ end
29
+ items.find_all { |item| item.parent.element == element }
30
+ end
31
+
32
+ def list_items
33
+ element.find_elements(:xpath, child_xpath)
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end