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,35 @@
1
+ <htmL>
2
+ <head>
3
+ <title>Prototype - Sample App</title>
4
+ <script type="application/x-javascript" src="/prototype-1.6.0.3.js"></script>
5
+ </head>
6
+ <body>
7
+ <div id="ajax-demo">
8
+ <h2>AJAX Calculator</h2>
9
+ <form id="calculator-form" action="#" method="post" onSubmit="return false;">
10
+ <input id="calculator-expression" name="calculator-expression"/>
11
+ <input type="submit" id="calculator-button" value="Compute" />
12
+ <br/><br/>
13
+ <div>Result: <input id="calculator-result" disabled /></div>
14
+ </form>
15
+
16
+ <script type="text/javascript" language="javascript">
17
+ Event.observe(window, 'load', function() {
18
+
19
+ Event.observe('calculator-button', 'click', function (event) {
20
+ new Ajax.Request('/compute', {
21
+ method: 'post',
22
+ parameters: $('calculator-form').serialize(true),
23
+ onSuccess: function(transport) {
24
+ $('calculator-result').value = transport.responseText;
25
+ },
26
+ });
27
+ return false;
28
+ });
29
+
30
+ });
31
+ </script>
32
+ </div>
33
+
34
+ </body>
35
+ </html>
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'rack'
3
+ require 'webrick'
4
+
5
+
6
+ class SampleApp
7
+
8
+ def self.start(host, port)
9
+ Rack::Handler::WEBrick.run new,
10
+ :Host => host,
11
+ :Port => port,
12
+ :Logger => ::WEBrick::Log.new(RUBY_PLATFORM =~ /mswin|mingw/ ? 'NUL:' : '/dev/null'),
13
+ :AccessLog => [nil, nil]
14
+ end
15
+
16
+ def initialize
17
+ @public = Rack::File.new(File.expand_path("../public", __FILE__))
18
+ end
19
+
20
+ def call(env)
21
+ req = Rack::Request.new(env)
22
+
23
+ case req.path
24
+ when "/"
25
+ [200, {}, ["Sample Application"]]
26
+ when "/compute"
27
+ sleep 3
28
+ resp = eval(req.params['calculator-expression']).to_s
29
+ [200, {}, [resp]]
30
+ else
31
+ @public.call(env)
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,86 @@
1
+ Feature: Select List
2
+ In order to interact with select lists
3
+ Testers will need access and interrogation ability
4
+
5
+
6
+ Background:
7
+ Given I am on the static elements page
8
+
9
+ Scenario: Selecting an element on the select list
10
+ When I select "Test 2" from the select list
11
+ Then the current item should be "Test 2"
12
+
13
+ Scenario: Selecting an element when there is a forward slash
14
+ When I select "Test/Test 3" from the select list
15
+ Then the current item should be "Test/Test 3"
16
+
17
+ Scenario Outline: Locating select lists on the Page
18
+ When I search for the select list by "<search_by>"
19
+ Then I should be able to select "Test 2"
20
+ And the value for the selected item should be "Test 2"
21
+ And the value for the option should be "option2"
22
+
23
+ Scenarios:
24
+ | search_by |
25
+ | id |
26
+ | class |
27
+ | name |
28
+ | xpath |
29
+ | index |
30
+ | label |
31
+
32
+ @selenium_only
33
+ Scenario Outline: Locating select lists on the Page using Selenium
34
+ When I search for the select list by "<search_by>"
35
+ Then I should be able to select "Test 2"
36
+ And the value for the selected item should be "Test 2"
37
+ And the value for the option should be "option2"
38
+
39
+ Examples:
40
+ | search_by |
41
+ | css |
42
+
43
+ Scenario Outline: Locating a select list using multiple parameters
44
+ When I search for the select list by "<param1>" and "<param2>"
45
+ Then I should be able to select "Test 2"
46
+ And the value for the selected item should be "Test 2"
47
+ And the value for the option should be "option2"
48
+
49
+ Scenarios:
50
+ | param1 | param2 |
51
+ | class | index |
52
+ | name | index |
53
+
54
+ Scenario: Iterating through the options in the select list
55
+ When I search for the select list by "id"
56
+ Then option "1" should contain "Test 1"
57
+ And option "2" should contain "Test 2"
58
+ And each option should contain "Test"
59
+
60
+ Scenario: Finding a select list dynamically
61
+ When I find a select list while the script is executing
62
+ Then I should see that the select list exists
63
+ And I should be able to select "Test 2" from the list
64
+
65
+ Scenario: Getting the selected option
66
+ When I select "Test 2" from the select list
67
+ Then the selected option should be "Test 2"
68
+
69
+ Scenario: Determining if a select list includes some option
70
+ Then the select list should include "Test 2"
71
+
72
+ Scenario: It should know if an option is selected
73
+ When I select "Test 2" from the select list
74
+ Then the select list should know that "Test 2" is selected
75
+
76
+ Scenario: Clearing multiple select list
77
+ When I clear multiple select list
78
+ Then multiple select list should have no selected options
79
+
80
+ Scenario: Selecting an option by its value
81
+ When I select an option using the value "option2"
82
+ Then the selected option should be "Test 2"
83
+
84
+ Scenario: Getting the value from a selected option
85
+ When I select an option using the value "option2"
86
+ Then the selected option should have a value of "option2"
@@ -0,0 +1,37 @@
1
+ Feature: Span
2
+
3
+ Background:
4
+ Given I am on the static elements page
5
+
6
+ Scenario: Getting the text from a span
7
+ When I get the text from the span
8
+ Then the text should be "My alert"
9
+
10
+ Scenario Outline: Locating spans on the page
11
+ When I search for the span by "<search_by>"
12
+ Then the text should be "My alert"
13
+
14
+ Scenarios:
15
+ | search_by |
16
+ | id |
17
+ | class |
18
+ | xpath |
19
+ | index |
20
+ | name |
21
+ | text |
22
+ | title |
23
+ | css |
24
+
25
+ Scenario Outline: Locating span using multiple parameters
26
+ When I search for the span by "<param1>" and "<param2>"
27
+ Then the text should be "My alert"
28
+
29
+ Scenarios:
30
+ | param1 | param2 |
31
+ | class | index |
32
+ | name | index |
33
+
34
+ Scenario: Finding a span dynamically
35
+ When I get the text from a span while the script is executing
36
+ Then I should see that the span exists
37
+ And the text should be "My alert"
@@ -0,0 +1,60 @@
1
+ Then /^the current item should be "([^\"]*)"$/ do |expected_text|
2
+ @page.sel_list_id.should == expected_text
3
+ end
4
+
5
+ Then /^the text should be "([^\"]*)"$/ do |expected_text|
6
+ @text.should == expected_text
7
+ end
8
+
9
+ Then /^I should be on the success page$/ do
10
+ @page.text.should include 'Success'
11
+ @page.title.should == 'Success'
12
+ end
13
+
14
+ Then /^the list items text should be "([^\"]*)"$/ do |expected_text|
15
+ @element.text.should == expected_text
16
+ end
17
+
18
+ When /^I get the first item from the list$/ do
19
+ @element = @list[0]
20
+ end
21
+
22
+ Then /^the table should have "([^\"]*)" rows$/ do |rows|
23
+ @element.rows.should == rows.to_i
24
+ end
25
+
26
+ Then /^each row should contain "([^\"]*)"$/ do |text|
27
+ @element.each do |row|
28
+ row.text.should include text
29
+ end
30
+ end
31
+
32
+ Then /^row "([^\"]*)" should have "([^\"]*)" columns$/ do |row, cols|
33
+ @element[row.to_i - 1].columns.should == cols.to_i
34
+ end
35
+
36
+ Then /^each column should contain "([^\"]*)"$/ do |text|
37
+ row = @element[0]
38
+ row.each do |column|
39
+ column.text.should include text
40
+ end
41
+ end
42
+
43
+ Then /^the list should contain (\d+) items$/ do |items|
44
+ @list.items.should == items.to_i
45
+ end
46
+
47
+ Then /^each item should contain "([^\"]*)"$/ do |text|
48
+ @list.each { |item| item.text.should include text }
49
+ end
50
+
51
+ Then /^option "([^\"]*)" should contain "([^\"]*)"$/ do |opt_num, text|
52
+ @element = @page.send "sel_list_#{@how}_element".to_sym
53
+ @element[opt_num.to_i - 1].text.should == text
54
+ end
55
+
56
+ Then /^each option should contain "([^\"]*)"$/ do |text|
57
+ @element.options.each do |option|
58
+ option.text.should include text
59
+ end
60
+ end
@@ -0,0 +1,19 @@
1
+ When /^I search for the area by "([^\"]*)"$/ do |how|
2
+ @how = how
3
+ end
4
+
5
+ Then /^I should be able to click the area$/ do
6
+ @page.send("area_#{@how}")
7
+ end
8
+
9
+ Then /^I should see the coordinates are "([^\"]*)"$/ do |coords|
10
+ @element.coords.should == coords
11
+ end
12
+
13
+ Then /^I should see the shape is "([^\"]*)"$/ do |shape|
14
+ @element.shape.should == shape
15
+ end
16
+
17
+ Then /^I should see the href is "([^\"]*)"$/ do |href|
18
+ @element.href.should include href
19
+ end
@@ -0,0 +1,83 @@
1
+ def success
2
+
3
+ end
4
+
5
+ Then /^I should be able to wait until it is present$/ do
6
+ @element.when_present do
7
+ success
8
+ end
9
+ end
10
+
11
+ Then /^I should be able to wait until it is visible$/ do
12
+ @element.when_visible do
13
+ success
14
+ end
15
+ end
16
+
17
+ Then /^I should be able to wait until it is not visible$/ do
18
+ begin
19
+ @element.when_not_visible do
20
+ fail
21
+ end
22
+ rescue
23
+ success
24
+ end
25
+ end
26
+
27
+ Then /^I should be able to wait until a block returns true$/ do
28
+ @element.wait_until do
29
+ @element.visible?
30
+ end
31
+ end
32
+
33
+ class AsyncPage
34
+ include PageObject
35
+ button(:target, :value => 'Target')
36
+ button(:hide, :value => 'Hide Button')
37
+ button(:unhide, :value => 'Unhide Button')
38
+ button(:create_button, :value => 'Create Button')
39
+ button(:remove_button, :value => 'Remove Button')
40
+ button(:created_button, :value => 'New Button')
41
+ end
42
+
43
+ Given /^I am on the async elements page$/ do
44
+ @page = AsyncPage.new(@browser)
45
+ @page.navigate_to(UrlHelper.async)
46
+ end
47
+
48
+ When /^I make the button invisible$/ do
49
+ @page.hide
50
+ sleep 2
51
+ end
52
+
53
+ Then /^I should be able to click it when it becomses visible$/ do
54
+ @page.unhide
55
+ @page.target_element.when_visible do
56
+ @page.target
57
+ end
58
+ end
59
+
60
+ Then /^I should be able to wait until the button becomes invisible$/ do
61
+ @page.hide
62
+ @page.target_element.when_not_visible do
63
+ @page.target_element.attribute("block").should == "none"
64
+ end
65
+ end
66
+
67
+ When /^I add a button a few seconds from now$/ do
68
+ @page.create_button
69
+ end
70
+
71
+ Then /^I should be able to click it when it gets added$/ do
72
+ @page.created_button_element.when_present.click
73
+ end
74
+
75
+ When /^I remove a button a few seconds from now$/ do
76
+ @page.created_button_element.when_present
77
+ @page.remove_button
78
+ end
79
+
80
+ Then /^I should not be able to find the button$/ do
81
+ @page.created_button_element.when_not_present
82
+ @page.created_button_element.exists?.should be_false
83
+ end
@@ -0,0 +1,27 @@
1
+ When /^I search for the audio element by "([^\"]*)"$/ do |how|
2
+ @element = @page.send "audio_#{how}_element"
3
+ end
4
+
5
+ When /^I search for the audio element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
6
+ @element = @page.send "audio_#{param1}_#{param2}_element"
7
+ end
8
+
9
+ Then /^I should know the audio is not autoplay$/ do
10
+ @element.should_not be_autoplay
11
+ end
12
+
13
+ Then /^I should know that the controls are displayed$/ do
14
+ @element.should have_controls
15
+ end
16
+
17
+ Then /^I should know that the audio is paused$/ do
18
+ @element.should be_paused
19
+ end
20
+
21
+ Then /^I should know that the duration is greater than (\d+) seconds$/ do |duration|
22
+ @element.duration.should > duration.to_f
23
+ end
24
+
25
+ Then /^I should know that its volume is (\d+)$/ do |volume|
26
+ @element.volume.should == volume.to_i
27
+ end
@@ -0,0 +1,43 @@
1
+ When /^I click the button$/ do
2
+ @page.button_id
3
+ end
4
+
5
+ When /^I click the button with type image$/ do
6
+ @page.button_image_id
7
+ end
8
+
9
+ When /^I click the image button using src$/ do
10
+ @page.button_image_src
11
+ end
12
+
13
+ When /^I click the image button using alt$/ do
14
+ @page.button_image_alt
15
+ end
16
+
17
+ When /^I search for the button by "([^\"]*)"$/ do |how|
18
+ @how = how
19
+ end
20
+
21
+ When /^I search for the button by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
22
+ @how = "#{param1}_#{param2}"
23
+ end
24
+
25
+ Then /^I should be able to click the button$/ do
26
+ @page.send "button_#{@how}"
27
+ end
28
+
29
+ Then /^I should be able to click the real button$/ do
30
+ @page.send "btn_#{@how}"
31
+ end
32
+
33
+ When /^I find a button while the script is executing$/ do
34
+ @button = @page.button_element(:id => 'button_id')
35
+ end
36
+
37
+ Then /^I should be able to click the button element$/ do
38
+ @button.click
39
+ end
40
+
41
+ Then /^I should see that the button exists$/ do
42
+ @page.button_id?.should == true
43
+ end
@@ -0,0 +1,15 @@
1
+ When /^I search for the canvas by "([^\"]*)"$/ do |how|
2
+ @element = @page.send "canvas_#{how}_element"
3
+ end
4
+
5
+ Then /^I should see that the canvas width is "([^\"]*)"$/ do |width|
6
+ @element.width.should == width.to_i
7
+ end
8
+
9
+ Then /^I should see that the canvas height is "([^\"]*)"$/ do |height|
10
+ @element.height.should == height.to_i
11
+ end
12
+
13
+ When /^I search for the canvas element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
14
+ @element = @page.send "canvas_#{param1}_#{param2}_element"
15
+ end
@@ -0,0 +1,35 @@
1
+ When /^I select the First check box$/ do
2
+ @page.check_cb_id
3
+ end
4
+
5
+ Then /^the First check box should be selected$/ do
6
+ @page.cb_id_checked?.should be_true
7
+ end
8
+
9
+ When /^I unselect the First check box$/ do
10
+ @page.uncheck_cb_id
11
+ end
12
+
13
+ Then /^the First check box should not be selected$/ do
14
+ @page.cb_id_checked?.should be_false
15
+ end
16
+
17
+ When /^I search for the check box by "([^\"]*)"$/ do |how|
18
+ @how = how
19
+ end
20
+
21
+ When /^I search for the check box by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
22
+ @how = "#{param1}_#{param2}"
23
+ end
24
+
25
+ Then /^I should be able to check the check box$/ do
26
+ @page.send "check_cb_#{@how}".to_sym
27
+ end
28
+
29
+ When /^I select the first check box while the script is executing$/ do
30
+ @page.checkbox_element(:id => 'cb_id').check
31
+ end
32
+
33
+ Then /^I should see that the checkbox exists$/ do
34
+ @page.button_id?.should == true
35
+ end
@@ -0,0 +1,19 @@
1
+ When /^I get the text from the div$/ do
2
+ @text = @page.div_id
3
+ end
4
+
5
+ When /^I search for the div by "([^\"]*)"$/ do |how|
6
+ @text = @page.send "div_#{how}".to_sym
7
+ end
8
+
9
+ When /^I search for the div by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
10
+ @text = @page.send "div_#{param1}_#{param2}".to_sym
11
+ end
12
+
13
+ When /^I get the text from a div while the script is executing$/ do
14
+ @text = @page.div_element(:id => 'div_id').text
15
+ end
16
+
17
+ Then /^I should see that the div exists$/ do
18
+ @page.div_id?.should == true
19
+ end