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,19 @@
1
+ Then /^I should be able to submit the form$/ do
2
+ @element.submit
3
+ end
4
+
5
+ When /^I locate the form by "([^\"]*)"$/ do |how|
6
+ @element = @page.send "form_#{how}_element"
7
+ end
8
+
9
+ When /^I locate the form using "([^"]*)" and "([^"]*)"$/ do |param1, param2|
10
+ @element = @page.send "form_#{param1}_#{param2}_element"
11
+ end
12
+
13
+ When /^I locate a form while the script is executing$/ do
14
+ @element = @page.form_element(:id => 'form_id')
15
+ end
16
+
17
+ Then /^I should see that the form exists$/ do
18
+ @page.form_id?.should == true
19
+ end
@@ -0,0 +1,159 @@
1
+ class FramePage
2
+ include PageObject
3
+
4
+ in_frame(:index => 1) do |frame|
5
+ text_field(:text_field_2_index, :name => 'recieverElement', :frame => frame)
6
+ end
7
+ in_frame(:index => 0) do |frame|
8
+ text_field(:text_field_1_index, :name => 'senderElement', :frame => frame)
9
+ end
10
+
11
+ in_frame(:id => 'frame_two_2') do |frame|
12
+ text_field(:text_field_2_id, :name => 'recieverElement', :frame => frame)
13
+ end
14
+ in_frame(:id => 'frame_one_1') do |frame|
15
+ text_field(:text_field_1_id, :name => 'senderElement', :frame => frame)
16
+ end
17
+
18
+ in_frame(:name => 'frame2') do |frame|
19
+ text_field(:text_field_2_name, :name => 'recieverElement', :frame => frame)
20
+ end
21
+ in_frame(:name => 'frame1') do |frame|
22
+ text_field(:text_field_1_name, :name => 'senderElement', :frame => frame)
23
+ end
24
+
25
+ in_frame(:id => /frame_two_\d+/) do |frame|
26
+ text_field(:text_field_2_regex, :name => 'recieverElement', :frame => frame)
27
+ end
28
+
29
+ end
30
+
31
+ class IFramePage
32
+ include PageObject
33
+
34
+ in_iframe(:id => 'frame_two_2') do |frame|
35
+ text_field(:text_field_2_id, :name => 'recieverElement', :frame => frame)
36
+ end
37
+ in_iframe(:id => 'frame_one_1') do |frame|
38
+ text_field(:text_field_1_id, :name => 'senderElement', :frame => frame)
39
+ end
40
+
41
+ in_iframe(:name => 'frame2') do |frame|
42
+ text_field(:text_field_2_name, :name => 'recieverElement', :frame => frame)
43
+ end
44
+ in_iframe(:name => 'frame1') do |frame|
45
+ text_field(:text_field_1_name, :name => 'senderElement', :frame => frame)
46
+ end
47
+
48
+ in_iframe(:index => 1) do |frame|
49
+ text_field(:text_field_2_index, :name => 'recieverElement', :frame => frame)
50
+ end
51
+ in_iframe(:index => 0) do |frame|
52
+ text_field(:text_field_1_index, :name => 'senderElement', :frame => frame)
53
+ end
54
+
55
+ in_iframe(:class => 'iframe', :name => 'frame2') do |frame|
56
+ text_field(:text_field_2_multiple_identifiers, :name => 'recieverElement', :frame => frame)
57
+ end
58
+ end
59
+
60
+
61
+ Given /^I am on the frame elements page$/ do
62
+ @page = FramePage.new(@browser)
63
+ @page.navigate_to(UrlHelper.frame_elements)
64
+ end
65
+
66
+ Given /^I am on the iframe elements page$/ do
67
+ @page = IFramePage.new(@browser)
68
+ @page.navigate_to(UrlHelper.iframe_elements)
69
+ end
70
+
71
+ When /^I type "([^\"]*)" into the text field for frame 2 using "([^\"]*)"$/ do |text, arg_type|
72
+ @page.send "text_field_2_#{arg_type.gsub(' ', '_')}=".to_sym, text
73
+ end
74
+
75
+ Then /^I should verify "([^\"]*)" is in the text field for frame 2 using "([^\"]*)"$/ do |text, arg_type|
76
+ result = @page.send "text_field_2_#{arg_type.gsub(' ', '_')}".to_sym
77
+ result.should == text
78
+ end
79
+
80
+ #Then /^I should be able to get the text fields text from frame 2 using "([^\"]*)"$/ do |arg_type|
81
+ # @page.send("text_field_2_#{arg_type}_element").text
82
+ #end
83
+
84
+ When /^I type "([^\"]*)" into the text field from frame 1 using "([^\"]*)"$/ do |text, arg_type|
85
+ @page.send "text_field_1_#{arg_type.gsub(' ', '_')}=".to_sym, text
86
+ end
87
+
88
+ Then /^I should verify "([^\"]*)" is in the text field for frame 1 using "([^\"]*)"$/ do |text, arg_type|
89
+ result = @page.send "text_field_1_#{arg_type.gsub(' ', '_')}".to_sym
90
+ result.should == text
91
+ end
92
+
93
+ class NestedFramePage
94
+ include PageObject
95
+
96
+ in_frame(:id => 'two') do |frame|
97
+ in_iframe({:id => 'three'}, frame) do |nested_frame|
98
+ link(:nested_link, :id => 'four', :frame => nested_frame)
99
+ end
100
+ end
101
+ end
102
+
103
+ Given /^I am on the nested frame elements page$/ do
104
+ @page = NestedFramePage.new(@browser)
105
+ @page.navigate_to(UrlHelper.nested_frame_elements)
106
+ end
107
+
108
+ Then /^I should be able to click the link in the frame$/ do
109
+ @page.nested_link
110
+ @page.text.should include "Success"
111
+ end
112
+
113
+ When /^I type "([^\"]*)" into the text field from frame 1 identified dynamically$/ do |value|
114
+ @page.in_frame(:id => 'frame_one_1') do |frame|
115
+ @page.text_field_element(:name => 'senderElement', :frame => frame).value = value
116
+ end
117
+ end
118
+
119
+ Then /^I should verify "([^\"]*)" in the text field for frame 1 identified dynamically$/ do |value|
120
+ @page.in_frame(:id => 'frame_one_1') do |frame|
121
+ @page.text_field_element(:name => 'senderElement', :frame => frame).value.should == value
122
+ end
123
+ end
124
+
125
+ When /^I type "([^\"]*)" into the text field from iframe 1 identified dynamically$/ do |value|
126
+ @page.in_iframe(:id => 'frame_one_1') do |frame|
127
+ @page.text_field_element(:name => 'senderElement', :frame => frame).value = value
128
+ end
129
+ end
130
+
131
+ Then /^I should verify "([^\"]*)" in the text field for iframe 1 identified dynamically$/ do |value|
132
+ @page.in_iframe(:id => 'frame_one_1') do |frame|
133
+ @page.text_field_element(:name => 'senderElement', :frame => frame).value.should == value
134
+ end
135
+ end
136
+
137
+ When /^I trigger an alert within a frame$/ do
138
+ @page.in_frame(:id => 'frame_three_3') do |frame|
139
+ @msg = @page.alert(frame) do
140
+ @page.button_element(:id => 'alert_button', :frame => frame).click
141
+ end
142
+ end
143
+ end
144
+
145
+ When /^I trigger a confirm within a frame$/ do
146
+ @page.in_frame(:id => 'frame_three_3') do |frame|
147
+ @msg = @page.confirm(true, frame) do
148
+ @page.button_element(:id => 'confirm_button', :frame => frame).click
149
+ end
150
+ end
151
+ end
152
+
153
+ When /^I trigger a prompt within a frame$/ do
154
+ @page.in_frame(:id => 'frame_three_3') do |frame|
155
+ @msg = @page.prompt("Cheezy", frame) do
156
+ @page.button_element(:id => 'prompt_button', :frame => frame).click
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,31 @@
1
+ When /^I get the text from the article$/ do
2
+ @text = @page.article_id
3
+ end
4
+
5
+ When /^I get the text from the header$/ do
6
+ @text = @page.header_id
7
+ end
8
+
9
+ When /^I get the text from the footer$/ do
10
+ @text = @page.footer_id
11
+ end
12
+
13
+ When /^I get the text from the summary$/ do
14
+ @text = @page.summary_id
15
+ end
16
+
17
+ When /^I get the text from the details$/ do
18
+ @text = @page.details_id
19
+ end
20
+
21
+ When /^I get the svg element$/ do
22
+ @svg = @page.svg_id_element
23
+ end
24
+
25
+ Then /^the svg width should be "(.*?)"$/ do |width|
26
+ @svg.attribute('width').should == width
27
+ end
28
+
29
+ Then /^the svg height should be "(.*?)"$/ do |height|
30
+ @svg.attribute('height').should == height
31
+ end
@@ -0,0 +1,58 @@
1
+
2
+ def class_exists?(class_name)
3
+ begin
4
+ klass = Module.const_get(class_name)
5
+ return klass.is_a?(Class)
6
+ rescue NameError
7
+ return false
8
+ end
9
+ end
10
+
11
+ Given /^I am on the Gxt Examples page$/ do
12
+ visit GxtSamplePageObject
13
+ end
14
+
15
+ When /^I have the Basic Grid opened$/ do
16
+ on(GxtSamplePageObject).basic_grid_element.click
17
+ end
18
+
19
+ When /^I have defined a GxtTable class extending Table$/ do
20
+ class GxtTable < PageObject::Elements::Table
21
+
22
+ def self.accessor_methods(accessor, name)
23
+ accessor.send :define_method, "#{name}_rows" do
24
+ self.send("#{name}_element").rows
25
+ end
26
+ end
27
+
28
+ protected
29
+ def child_xpath
30
+ ".//descendant::tr"
31
+ end
32
+ end
33
+ end
34
+
35
+ When /^I define a page-object using that widget$/ do
36
+ class GxtSamplePageObject
37
+ include PageObject
38
+
39
+ page_url "http://gxtexamplegallery.appspot.com/"
40
+
41
+ div(:basic_grid, :class => "label_basic_grid")
42
+ gxt_table(:gxt_table, :class => "x-grid3")
43
+ end unless class_exists? 'GxtSamplePageObject'
44
+ end
45
+
46
+ When /^I have registered the GxtTable with PageObject$/ do
47
+ PageObject.register_widget :gxt_table, GxtTable, 'div'
48
+ end
49
+
50
+ When /^I retrieve a GxtTable widget$/ do
51
+ @element = on(GxtSamplePageObject).gxt_table_element
52
+ end
53
+
54
+
55
+ When /^the GxtTable should have "(\d+)" rows$/ do |rows|
56
+ on(GxtSamplePageObject).gxt_table_rows.should == rows.to_i
57
+ end
58
+
@@ -0,0 +1,12 @@
1
+ When /^I get the text for the "([^\"]*)" element$/ do |el|
2
+ @heading = @page.send "#{el}_id"
3
+ end
4
+
5
+ Then /^I should see "([^\"]*)"$/ do |text|
6
+ @heading.should == text
7
+ end
8
+
9
+ When /^I search for the heading(\d+) by "([^"]*)"$/ do |head_type, type|
10
+ @heading = @page.send "h#{head_type}_#{type}"
11
+ end
12
+
@@ -0,0 +1,27 @@
1
+ When /^I retrieve the hidden field element$/ do
2
+ @element = @page.hidden_field_id_element
3
+ end
4
+
5
+ Then /^I should see the hidden field contains "([^\"]*)"$/ do |text|
6
+ @page.hidden_field_id.should == text
7
+ end
8
+
9
+ When /^I search for the hidden field by "([^\"]*)"$/ do |how|
10
+ @element = @page.send "hidden_field_#{how}_element"
11
+ end
12
+
13
+ Then /^the hidden field element should contain "([^\"]*)"$/ do |text|
14
+ @element.value.should == text
15
+ end
16
+
17
+ When /^I search for the hidden field by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
18
+ @element = @page.send "hidden_field_#{param1}_#{param2}_element"
19
+ end
20
+
21
+ When /^I find a hidden field while the script is executing$/ do
22
+ @element = @page.hidden_field_element(:id => 'hidden_field_id')
23
+ end
24
+
25
+ Then /^I should see that the hidden field exists$/ do
26
+ @page.hidden_field_id?.should == true
27
+ end
@@ -0,0 +1,27 @@
1
+ When /^I get the image element$/ do
2
+ @element = @page.image_id_element
3
+ end
4
+
5
+ Then /^the image should be "([^\"]*)" pixels wide$/ do |width|
6
+ @element.width.should == width.to_i
7
+ end
8
+
9
+ Then /^the image should be "([^\"]*)" pixels tall$/ do |height|
10
+ @element.height.should == height.to_i
11
+ end
12
+
13
+ When /^I get the image element by "([^\"]*)"$/ do |how|
14
+ @element = @page.send "image_#{how}_element"
15
+ end
16
+
17
+ When /^I get the image element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
18
+ @element = @page.send "image_#{param1}_#{param2}_element"
19
+ end
20
+
21
+ When /^I get the image element while the script is executing$/ do
22
+ @element = @page.image_element(:id => 'image_id')
23
+ end
24
+
25
+ Then /^I should see that the image exists$/ do
26
+ @page.image_id?.should == true
27
+ end
@@ -0,0 +1,163 @@
1
+ class IndexedPropertyPage
2
+ include PageObject
3
+
4
+ indexed_property :table, [[:text_field, :text_table, {:id => 'table[%s].text'}],
5
+ [:text_field, :text_name, {:name => 'tableName[%s].text'}],
6
+ [:radio_button, :radio, {:id => 'table[%s].radio'}],
7
+ [:checkbox, :check, {:id => 'table[%s].check'}],
8
+ [:text_area, :area, {:id => 'table[%s].area'}],
9
+ [:button, :button, {:id => 'table[%s].button'}],
10
+ [:div, :content, {:id => 'table[%s].content'}],
11
+ [:div, :nil?, {:id => 'table[%s].bad_name'}],
12
+ ]
13
+
14
+ indexed_property :index_table, [[:radio_button, :radio, {:index => '%d'}]]
15
+
16
+ indexed_property :nottable, [[:text_field, :text_nottable, {:id => 'nottable[%s].text'}]]
17
+
18
+ indexed_property :other_table, [
19
+ [:text_field, :text_table, {:id => 'other_table[%s].text'}],
20
+ [:div, :content, {:id => 'other_table[%s].content'}]
21
+ ]
22
+
23
+ end
24
+
25
+ def page
26
+ @page ||= IndexedPropertyPage.new(@browser)
27
+ end
28
+
29
+ Given /^I am on the indexed property page$/ do
30
+ # @page = IndexedPropertyPage.new(@browser)
31
+ page.navigate_to(UrlHelper.indexed)
32
+ end
33
+
34
+ When /^I search for the elements for index "([^\"]*)"$/ do |index|
35
+ @index = index
36
+ end
37
+
38
+ Then /^I type "([^\"]*)" into the table's indexed text field by id$/ do |val|
39
+ page.table[@index].text_table = val
40
+ end
41
+
42
+ Then /^The table's indexed text field by id should contain "([^\"]*)"$/ do |val|
43
+ page.table[@index].text_table.should == val
44
+ end
45
+
46
+ Then /^I type "([^\"]*)" into the table's indexed text field by name$/ do |val|
47
+ page.table[@index].text_name = val
48
+ end
49
+
50
+ Then /^The table's indexed text field by name should contain "([^\"]*)"$/ do |val|
51
+ page.table[@index].text_name.should == val
52
+ end
53
+
54
+ Then /^I select the indexed radio button$/ do
55
+ page.table[@index].select_radio
56
+ end
57
+
58
+ Then /^The indexed radio button should be selected$/ do
59
+ page.table[@index].radio_selected?.should == true
60
+ end
61
+
62
+ Then /^I check the indexed checkbox$/ do
63
+ page.table[@index].check_check
64
+ end
65
+
66
+ Then /^The indexed checkbox should be checked$/ do
67
+ page.table[@index].check_checked?.should == true
68
+ end
69
+
70
+ Then /^I type "([^\"]*)" into the table's indexed text area$/ do |val|
71
+ page.table[@index].area = val
72
+ end
73
+
74
+ Then /^The table's indexed text area should contain "([^\"]*)"$/ do |val|
75
+ page.table[@index].area.should == val
76
+ end
77
+
78
+ Then /^I should see that the indexed button exists$/ do
79
+ page.table[@index].button?.should == true
80
+ end
81
+
82
+ Then /^I should be able to click the indexed button$/ do
83
+ page.table[@index].button
84
+ end
85
+
86
+ Then /^I type "([^\"]*)" into the regular indexed text field by id$/ do |val|
87
+ page.nottable[@index].text_nottable = val
88
+ end
89
+
90
+ Then /^The regular indexed text field by id should contain "([^\"]*)"$/ do |val|
91
+ page.nottable[@index].text_nottable.should == val
92
+ end
93
+
94
+
95
+ When(/^I search for an element not on my indexed property but on another$/) do
96
+ @index = 'foo'
97
+ end
98
+
99
+ Then(/^I should see that the element doesn't exist$/) do
100
+ expect { page.other_table[@index].radio_element.value }.to raise_error(NoMethodError)
101
+ end
102
+
103
+ When(/^I search for an element that is on an indexed property$/) do
104
+ page.table['foo'].radio_element
105
+ end
106
+
107
+ And(/^I search for the element on another indexed property it is not on$/) do
108
+ @index = 'foo'
109
+ end
110
+
111
+ When(/^I search using the index which is not on another indexed property$/) do
112
+ @index = '123'
113
+ end
114
+
115
+ Then(/^I should see that the element doesn't exist for that index/) do
116
+ expect { page.other_table[@index].text_table_element.text }.to raise_error /unable to locate element|Selenium::WebDriver::Error::NoSuchElementError/
117
+ end
118
+
119
+ When(/^I search for an element by an index on an indexed property$/) do
120
+ page.table['123'].text_table_element.html
121
+ end
122
+
123
+ And(/^I search using an index which is on another indexed property$/) do
124
+ @index = 'bar'
125
+ end
126
+
127
+ Then(/^I should see the content of the element on the second indexed property$/) do
128
+ expect(page.other_table['bar'].content).to eq 'bar!'
129
+ end
130
+
131
+ When(/^I search for an element with text by an index on an indexed property$/) do
132
+ @indexed_property = page.table
133
+ @contents = [@indexed_property['123'].content]
134
+ expect(@contents[0]).to eq '123!'
135
+ end
136
+
137
+ And(/^I search for a different element with text by index on the indexed property$/) do
138
+ @contents << @indexed_property['12test'].content
139
+ end
140
+
141
+ Then(/^I should see the contents of both elements$/) do
142
+ expect(@contents).to eq ['123!','12test!']
143
+ end
144
+
145
+ When(/^I use a name that collides with a ruby method on an indexed property$/) do
146
+ #noop element is already defined on indexed property
147
+ end
148
+
149
+ Then(/^the original method remains$/) do
150
+ expect(page.table['foo'].nil?).to be false
151
+ end
152
+
153
+ When(/^I search for the elements with index (.*)$/) do |index|
154
+ @index = index.to_i
155
+ end
156
+
157
+ And(/^I select the table's indexed radio button$/) do
158
+ page.index_table[@index].select_radio
159
+ end
160
+
161
+ Then(/^The table's indexed radio button should be selected$/) do
162
+ expect(page.index_table[@index]).to be_radio_selected
163
+ end