meeane-page-object 0.1.10 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (253) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -7
  3. data/.rspec +2 -2
  4. data/.ruby-gemset +1 -1
  5. data/.ruby-version +1 -1
  6. data/.travis.yml +10 -10
  7. data/ChangeLog +790 -790
  8. data/Gemfile +13 -13
  9. data/Guardfile +20 -20
  10. data/LICENSE +20 -20
  11. data/README.md +1 -1
  12. data/Rakefile +35 -35
  13. data/cucumber.yml +10 -10
  14. data/features/area.feature +35 -35
  15. data/features/async.feature +30 -30
  16. data/features/audio.feature +68 -68
  17. data/features/button.feature +88 -87
  18. data/features/canvas.feature +37 -37
  19. data/features/check_box.feature +55 -55
  20. data/features/div.feature +45 -45
  21. data/features/element.feature +322 -322
  22. data/features/file_field.feature +40 -40
  23. data/features/form.feature +43 -43
  24. data/features/frames.feature +75 -75
  25. data/features/generic_elements.feature +29 -29
  26. data/features/gxt_table_extension.feature +24 -24
  27. data/features/headings.feature +97 -97
  28. data/features/hidden_field.feature +45 -45
  29. data/features/html/async.html +36 -36
  30. data/features/html/double_click.html +12 -12
  31. data/features/html/failure.html +7 -7
  32. data/features/html/frame_1.html +17 -17
  33. data/features/html/frame_2.html +15 -15
  34. data/features/html/frame_3.html +14 -14
  35. data/features/html/frames.html +12 -12
  36. data/features/html/hover.html +11 -11
  37. data/features/html/iframes.html +12 -12
  38. data/features/html/indexed_property.html +51 -51
  39. data/features/html/modal.html +17 -17
  40. data/features/html/modal_1.html +37 -37
  41. data/features/html/modal_2.html +26 -26
  42. data/features/html/multi_elements.html +144 -144
  43. data/features/html/nested_elements.html +77 -77
  44. data/features/html/nested_frame_2.html +11 -11
  45. data/features/html/nested_frame_3.html +14 -14
  46. data/features/html/nested_frames.html +10 -10
  47. data/features/html/static_elements.html +233 -226
  48. data/features/html/success.html +7 -7
  49. data/features/html/sun.html +7 -7
  50. data/features/image.feature +50 -50
  51. data/features/indexed_property.feature +97 -97
  52. data/features/javascript.feature +27 -27
  53. data/features/label.feature +46 -46
  54. data/features/link.feature +52 -52
  55. data/features/list_item.feature +36 -36
  56. data/features/modal_dialog.feature +15 -15
  57. data/features/multi_elements.feature +486 -486
  58. data/features/nested_elements.feature +117 -117
  59. data/features/ordered_list.feature +56 -56
  60. data/features/page_level_actions.feature +90 -90
  61. data/features/paragraph.feature +35 -35
  62. data/features/radio_button.feature +58 -58
  63. data/features/radio_button_collinson.feature +12 -58
  64. data/features/radio_button_group.feature +29 -29
  65. data/features/sample-app/public/jquery-1.3.2.js +4376 -4376
  66. data/features/sample-app/public/jquery.html +30 -30
  67. data/features/sample-app/public/prototype-1.6.0.3.js +4319 -4319
  68. data/features/sample-app/public/prototype.html +35 -35
  69. data/features/sample-app/sample_app.rb +35 -35
  70. data/features/select_list.feature +86 -86
  71. data/features/span.feature +37 -37
  72. data/features/step_definitions/accessor_steps.rb +60 -60
  73. data/features/step_definitions/area_steps.rb +19 -19
  74. data/features/step_definitions/async_steps.rb +83 -83
  75. data/features/step_definitions/audio_steps.rb +27 -27
  76. data/features/step_definitions/button_steps.rb +43 -43
  77. data/features/step_definitions/canvas_steps.rb +15 -15
  78. data/features/step_definitions/check_box_steps.rb +35 -35
  79. data/features/step_definitions/div_steps.rb +19 -19
  80. data/features/step_definitions/element_steps.rb +266 -266
  81. data/features/step_definitions/file_field_steps.rb +19 -19
  82. data/features/step_definitions/form_steps.rb +18 -18
  83. data/features/step_definitions/frames_steps.rb +159 -159
  84. data/features/step_definitions/generic_element_steps.rb +31 -31
  85. data/features/step_definitions/gxt_table_steps.rb +58 -58
  86. data/features/step_definitions/headings_steps.rb +12 -12
  87. data/features/step_definitions/hidden_field_steps.rb +26 -26
  88. data/features/step_definitions/image_steps.rb +27 -27
  89. data/features/step_definitions/indexed_property_steps.rb +128 -128
  90. data/features/step_definitions/javascript_steps.rb +52 -52
  91. data/features/step_definitions/label_steps.rb +19 -19
  92. data/features/step_definitions/link_steps.rb +40 -40
  93. data/features/step_definitions/list_item_steps.rb +19 -19
  94. data/features/step_definitions/modal_dialog_steps.rb +62 -62
  95. data/features/step_definitions/multi_elements_steps.rb +528 -528
  96. data/features/step_definitions/nested_elements_steps.rb +212 -212
  97. data/features/step_definitions/ordered_list_steps.rb +23 -23
  98. data/features/step_definitions/page_level_actions_steps.rb +135 -135
  99. data/features/step_definitions/page_traversal_steps.rb +4 -4
  100. data/features/step_definitions/paragraph_steps.rb +28 -28
  101. data/features/step_definitions/radio_button_collinson_steps.rb +2 -46
  102. data/features/step_definitions/radio_button_group_steps.rb +35 -35
  103. data/features/step_definitions/radio_button_steps.rb +26 -46
  104. data/features/step_definitions/select_list_steps.rb +65 -65
  105. data/features/step_definitions/span_steps.rb +19 -19
  106. data/features/step_definitions/table_cell_steps.rb +14 -14
  107. data/features/step_definitions/table_steps.rb +66 -66
  108. data/features/step_definitions/text_area_steps.rb +34 -34
  109. data/features/step_definitions/text_field_steps.rb +35 -35
  110. data/features/step_definitions/unordered_list_steps.rb +23 -23
  111. data/features/step_definitions/video_steps.rb +45 -45
  112. data/features/support/ajax_text_environment.rb +26 -26
  113. data/features/support/env.rb +8 -8
  114. data/features/support/hooks.rb +8 -8
  115. data/features/support/page.rb +370 -364
  116. data/features/support/persistent_browser.rb +70 -70
  117. data/features/support/targets/firefox14_osx.rb +6 -6
  118. data/features/support/targets/firefox14_windows7.rb +6 -6
  119. data/features/support/url_helper.rb +57 -57
  120. data/features/table.feature +114 -114
  121. data/features/table_cell.feature +45 -45
  122. data/features/text_area.feature +51 -51
  123. data/features/text_field.feature +70 -70
  124. data/features/unordered_list.feature +56 -56
  125. data/features/video.feature +73 -73
  126. data/lib/page-object.rb +408 -408
  127. data/lib/page-object/accessors.rb +1313 -1313
  128. data/lib/page-object/core_ext/string.rb +4 -4
  129. data/lib/page-object/element_locators.rb +21 -21
  130. data/lib/page-object/elements.rb +59 -59
  131. data/lib/page-object/elements/area.rb +31 -31
  132. data/lib/page-object/elements/audio.rb +9 -9
  133. data/lib/page-object/elements/button.rb +35 -35
  134. data/lib/page-object/elements/canvas.rb +23 -23
  135. data/lib/page-object/elements/check_box.rb +37 -37
  136. data/lib/page-object/elements/div.rb +19 -19
  137. data/lib/page-object/elements/element.rb +226 -226
  138. data/lib/page-object/elements/file_field.rb +38 -38
  139. data/lib/page-object/elements/form.rb +36 -36
  140. data/lib/page-object/elements/heading.rb +15 -15
  141. data/lib/page-object/elements/hidden_field.rb +22 -22
  142. data/lib/page-object/elements/image.rb +36 -36
  143. data/lib/page-object/elements/label.rb +36 -36
  144. data/lib/page-object/elements/link.rb +46 -46
  145. data/lib/page-object/elements/list_item.rb +19 -19
  146. data/lib/page-object/elements/media.rb +45 -45
  147. data/lib/page-object/elements/option.rb +10 -10
  148. data/lib/page-object/elements/ordered_list.rb +50 -50
  149. data/lib/page-object/elements/paragraph.rb +9 -9
  150. data/lib/page-object/elements/radio_button.rb +37 -37
  151. data/lib/page-object/elements/select_list.rb +42 -42
  152. data/lib/page-object/elements/span.rb +19 -19
  153. data/lib/page-object/elements/table.rb +68 -68
  154. data/lib/page-object/elements/table_cell.rb +28 -28
  155. data/lib/page-object/elements/table_row.rb +50 -50
  156. data/lib/page-object/elements/text_area.rb +38 -38
  157. data/lib/page-object/elements/text_field.rb +42 -42
  158. data/lib/page-object/elements/unordered_list.rb +51 -51
  159. data/lib/page-object/elements/video.rb +18 -18
  160. data/lib/page-object/indexed_properties.rb +36 -36
  161. data/lib/page-object/javascript/jquery.rb +14 -14
  162. data/lib/page-object/javascript/prototype.rb +14 -14
  163. data/lib/page-object/javascript/yui.rb +18 -18
  164. data/lib/page-object/javascript_framework_facade.rb +78 -78
  165. data/lib/page-object/loads_platform.rb +26 -26
  166. data/lib/page-object/locator_generator.rb +129 -129
  167. data/lib/page-object/nested_elements.rb +17 -17
  168. data/lib/page-object/page_factory.rb +108 -108
  169. data/lib/page-object/page_populator.rb +92 -92
  170. data/lib/page-object/platforms.rb +18 -18
  171. data/lib/page-object/platforms/selenium_webdriver.rb +17 -17
  172. data/lib/page-object/platforms/selenium_webdriver/button.rb +14 -14
  173. data/lib/page-object/platforms/selenium_webdriver/check_box.rb +29 -29
  174. data/lib/page-object/platforms/selenium_webdriver/element.rb +291 -291
  175. data/lib/page-object/platforms/selenium_webdriver/file_field.rb +16 -16
  176. data/lib/page-object/platforms/selenium_webdriver/form.rb +16 -16
  177. data/lib/page-object/platforms/selenium_webdriver/image.rb +28 -28
  178. data/lib/page-object/platforms/selenium_webdriver/label.rb +17 -18
  179. data/lib/page-object/platforms/selenium_webdriver/link.rb +23 -23
  180. data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +39 -39
  181. data/lib/page-object/platforms/selenium_webdriver/page_object.rb +1136 -1136
  182. data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +22 -22
  183. data/lib/page-object/platforms/selenium_webdriver/select_list.rb +93 -93
  184. data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +42 -42
  185. data/lib/page-object/platforms/selenium_webdriver/table.rb +42 -42
  186. data/lib/page-object/platforms/selenium_webdriver/table_row.rb +43 -43
  187. data/lib/page-object/platforms/selenium_webdriver/text_area.rb +17 -17
  188. data/lib/page-object/platforms/selenium_webdriver/text_field.rb +17 -17
  189. data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +39 -39
  190. data/lib/page-object/platforms/watir_webdriver.rb +18 -18
  191. data/lib/page-object/platforms/watir_webdriver/check_box.rb +29 -29
  192. data/lib/page-object/platforms/watir_webdriver/element.rb +249 -249
  193. data/lib/page-object/platforms/watir_webdriver/file_field.rb +16 -16
  194. data/lib/page-object/platforms/watir_webdriver/form.rb +16 -16
  195. data/lib/page-object/platforms/watir_webdriver/image.rb +22 -22
  196. data/lib/page-object/platforms/watir_webdriver/label.rb +17 -18
  197. data/lib/page-object/platforms/watir_webdriver/link.rb +15 -15
  198. data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +35 -35
  199. data/lib/page-object/platforms/watir_webdriver/page_object.rb +1029 -1029
  200. data/lib/page-object/platforms/watir_webdriver/radio_button.rb +22 -22
  201. data/lib/page-object/platforms/watir_webdriver/select_list.rb +74 -74
  202. data/lib/page-object/platforms/watir_webdriver/table.rb +38 -38
  203. data/lib/page-object/platforms/watir_webdriver/table_row.rb +37 -37
  204. data/lib/page-object/platforms/watir_webdriver/text_area.rb +23 -23
  205. data/lib/page-object/platforms/watir_webdriver/text_field.rb +16 -16
  206. data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +36 -36
  207. data/lib/page-object/version.rb +4 -4
  208. data/lib/page-object/widgets.rb +133 -133
  209. data/meeane-page-object.gemspec +32 -32
  210. data/spec/page-object/element_locators_spec.rb +1065 -1065
  211. data/spec/page-object/elements/area_spec.rb +45 -45
  212. data/spec/page-object/elements/button_spec.rb +50 -50
  213. data/spec/page-object/elements/canvas_spec.rb +40 -40
  214. data/spec/page-object/elements/check_box_spec.rb +49 -49
  215. data/spec/page-object/elements/div_spec.rb +28 -28
  216. data/spec/page-object/elements/element_spec.rb +114 -114
  217. data/spec/page-object/elements/file_field_spec.rb +39 -39
  218. data/spec/page-object/elements/form_spec.rb +28 -28
  219. data/spec/page-object/elements/heading_spec.rb +48 -48
  220. data/spec/page-object/elements/hidden_field_spec.rb +28 -28
  221. data/spec/page-object/elements/image_spec.rb +66 -66
  222. data/spec/page-object/elements/label_spec.rb +29 -29
  223. data/spec/page-object/elements/link_spec.rb +49 -49
  224. data/spec/page-object/elements/list_item_spec.rb +28 -28
  225. data/spec/page-object/elements/nested_element_spec.rb +254 -254
  226. data/spec/page-object/elements/option_spec.rb +11 -11
  227. data/spec/page-object/elements/ordered_list_spec.rb +94 -94
  228. data/spec/page-object/elements/paragraph_spec.rb +28 -28
  229. data/spec/page-object/elements/select_list_spec.rb +142 -142
  230. data/spec/page-object/elements/selenium/radio_button_spec.rb +44 -44
  231. data/spec/page-object/elements/selenium/text_field_spec.rb +49 -49
  232. data/spec/page-object/elements/selenium_element_spec.rb +172 -172
  233. data/spec/page-object/elements/span_spec.rb +26 -26
  234. data/spec/page-object/elements/table_cell_spec.rb +21 -21
  235. data/spec/page-object/elements/table_row_spec.rb +70 -70
  236. data/spec/page-object/elements/table_spec.rb +98 -98
  237. data/spec/page-object/elements/text_area_spec.rb +39 -39
  238. data/spec/page-object/elements/unordered_list_spec.rb +95 -95
  239. data/spec/page-object/elements/watir_element_spec.rb +142 -142
  240. data/spec/page-object/javascript_framework_facade_spec.rb +61 -61
  241. data/spec/page-object/loads_platform_spec.rb +53 -53
  242. data/spec/page-object/page-object_spec.rb +405 -405
  243. data/spec/page-object/page_factory_spec.rb +256 -256
  244. data/spec/page-object/page_populator_spec.rb +122 -122
  245. data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +68 -68
  246. data/spec/page-object/platforms/selenium_webdriver_spec.rb +28 -28
  247. data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +29 -29
  248. data/spec/page-object/platforms/watir_webdriver_spec.rb +9 -9
  249. data/spec/page-object/selenium_accessors_spec.rb +589 -589
  250. data/spec/page-object/watir_accessors_spec.rb +1107 -1107
  251. data/spec/page-object/widget_spec.rb +226 -226
  252. data/spec/spec_helper.rb +44 -44
  253. metadata +193 -43
@@ -1,61 +1,61 @@
1
- require 'spec_helper'
2
-
3
- class TestClass
4
- include PageObject::JavascriptFrameworkFacade
5
- end
6
-
7
-
8
- describe PageObject::JavascriptFrameworkFacade do
9
- let(:facade) { PageObject::JavascriptFrameworkFacade }
10
-
11
- it "should allow the selection of a javascript framework" do
12
- facade.framework = :jquery
13
- facade.framework.should == :jquery
14
- end
15
-
16
- it "should register the jQuery script builder" do
17
- facade.framework = :jquery
18
- facade.script_builder.should == ::PageObject::Javascript::JQuery
19
- end
20
-
21
- it "should return script for pending requests in jQuery" do
22
- facade.framework = :jquery
23
- facade.pending_requests.should == 'return jQuery.active'
24
- end
25
-
26
- it "should register the Prototype script builder" do
27
- facade.framework = :prototype
28
- facade.script_builder.should == ::PageObject::Javascript::Prototype
29
- end
30
-
31
- it "should return script for pending requests in Prototype" do
32
- facade.framework = :prototype
33
- facade.pending_requests.should == 'return Ajax.activeRequestCount'
34
- end
35
-
36
- it "should not allow you to set the framework to one it does not know about" do
37
- expect{ facade.framework = :blah }.to raise_error
38
- end
39
-
40
- it "should allow you to add a new javascript framework" do
41
- module GoodFake
42
- def self.pending_requests
43
- "fake"
44
- end
45
- end
46
-
47
- facade.add_framework(:blah, GoodFake)
48
- facade.framework = :blah
49
- facade.pending_requests.should == "fake"
50
- end
51
-
52
- it "should not allow you to add a new javascript framework that is invalid" do
53
- module BadFake
54
- def self.blah
55
- end
56
- end
57
-
58
- expect{ facade.add_framework(:blah, BadFake) }.to raise_error
59
- end
60
- end
61
-
1
+ require 'spec_helper'
2
+
3
+ class TestClass
4
+ include PageObject::JavascriptFrameworkFacade
5
+ end
6
+
7
+
8
+ describe PageObject::JavascriptFrameworkFacade do
9
+ let(:facade) { PageObject::JavascriptFrameworkFacade }
10
+
11
+ it "should allow the selection of a javascript framework" do
12
+ facade.framework = :jquery
13
+ facade.framework.should == :jquery
14
+ end
15
+
16
+ it "should register the jQuery script builder" do
17
+ facade.framework = :jquery
18
+ facade.script_builder.should == ::PageObject::Javascript::JQuery
19
+ end
20
+
21
+ it "should return script for pending requests in jQuery" do
22
+ facade.framework = :jquery
23
+ facade.pending_requests.should == 'return jQuery.active'
24
+ end
25
+
26
+ it "should register the Prototype script builder" do
27
+ facade.framework = :prototype
28
+ facade.script_builder.should == ::PageObject::Javascript::Prototype
29
+ end
30
+
31
+ it "should return script for pending requests in Prototype" do
32
+ facade.framework = :prototype
33
+ facade.pending_requests.should == 'return Ajax.activeRequestCount'
34
+ end
35
+
36
+ it "should not allow you to set the framework to one it does not know about" do
37
+ expect{ facade.framework = :blah }.to raise_error
38
+ end
39
+
40
+ it "should allow you to add a new javascript framework" do
41
+ module GoodFake
42
+ def self.pending_requests
43
+ "fake"
44
+ end
45
+ end
46
+
47
+ facade.add_framework(:blah, GoodFake)
48
+ facade.framework = :blah
49
+ facade.pending_requests.should == "fake"
50
+ end
51
+
52
+ it "should not allow you to add a new javascript framework that is invalid" do
53
+ module BadFake
54
+ def self.blah
55
+ end
56
+ end
57
+
58
+ expect{ facade.add_framework(:blah, BadFake) }.to raise_error
59
+ end
60
+ end
61
+
@@ -1,53 +1,53 @@
1
- require 'spec_helper'
2
- class TestLoadsPlatform
3
- include PageObject::LoadsPlatform
4
- end
5
- describe TestLoadsPlatform do
6
- let(:subject) { TestLoadsPlatform.new }
7
- let(:adapters) { {} }
8
-
9
- context "when browser x is registered with platform nom_nom_nom" do
10
- let(:browser_x) { double('browser') }
11
- before { adapters[:browser_x] = mock_adapter(browser_x, :nom_nom_nom) }
12
-
13
- it "returns platform nom_nom_nom when asked about browser_x" do
14
- subject.load_platform(browser_x, adapters).should == :nom_nom_nom
15
- end
16
-
17
- context "when browser a is registered with platform boom_boom_boom" do
18
- let(:browser_a) { double('browser') }
19
- before { adapters[:browser_a] = mock_adapter(browser_a, :boom_boom_boom) }
20
-
21
- it "should return platform nom_nom_nom when asked about browser_x" do
22
- subject.load_platform(browser_x, adapters).should == :nom_nom_nom
23
- end
24
- end
25
- end
26
-
27
- context "when browser a is registered with platform boom_boom_boom" do
28
- let(:browser_n) { double('browser') }
29
- before { adapters[:browser_n] = mock_adapter(browser_n, :boom_boom_boom) }
30
-
31
- it "should return platform boom_boom_boom" do
32
- subject.load_platform(browser_n, adapters).should == :boom_boom_boom
33
- end
34
- end
35
-
36
- context "When an unknow object is passed in" do
37
- let(:basic_message) { 'Unable to pick a platform for the provided browser.' }
38
-
39
- it "should throw an exception" do
40
- expect {
41
- subject.load_platform("browser", {})
42
- }.to raise_error(basic_message)
43
- end
44
-
45
- it "should notify when the browser is nil" do
46
- begin
47
- subject.load_platform(nil, {})
48
- rescue Exception => e
49
- e.message.should == "#{basic_message}\nnil was passed to the PageObject constructor instead of a valid browser object."
50
- end
51
- end
52
- end
53
- end
1
+ require 'spec_helper'
2
+ class TestLoadsPlatform
3
+ include PageObject::LoadsPlatform
4
+ end
5
+ describe TestLoadsPlatform do
6
+ let(:subject) { TestLoadsPlatform.new }
7
+ let(:adapters) { {} }
8
+
9
+ context "when browser x is registered with platform nom_nom_nom" do
10
+ let(:browser_x) { double('browser') }
11
+ before { adapters[:browser_x] = mock_adapter(browser_x, :nom_nom_nom) }
12
+
13
+ it "returns platform nom_nom_nom when asked about browser_x" do
14
+ subject.load_platform(browser_x, adapters).should == :nom_nom_nom
15
+ end
16
+
17
+ context "when browser a is registered with platform boom_boom_boom" do
18
+ let(:browser_a) { double('browser') }
19
+ before { adapters[:browser_a] = mock_adapter(browser_a, :boom_boom_boom) }
20
+
21
+ it "should return platform nom_nom_nom when asked about browser_x" do
22
+ subject.load_platform(browser_x, adapters).should == :nom_nom_nom
23
+ end
24
+ end
25
+ end
26
+
27
+ context "when browser a is registered with platform boom_boom_boom" do
28
+ let(:browser_n) { double('browser') }
29
+ before { adapters[:browser_n] = mock_adapter(browser_n, :boom_boom_boom) }
30
+
31
+ it "should return platform boom_boom_boom" do
32
+ subject.load_platform(browser_n, adapters).should == :boom_boom_boom
33
+ end
34
+ end
35
+
36
+ context "When an unknow object is passed in" do
37
+ let(:basic_message) { 'Unable to pick a platform for the provided browser.' }
38
+
39
+ it "should throw an exception" do
40
+ expect {
41
+ subject.load_platform("browser", {})
42
+ }.to raise_error(basic_message)
43
+ end
44
+
45
+ it "should notify when the browser is nil" do
46
+ begin
47
+ subject.load_platform(nil, {})
48
+ rescue Exception => e
49
+ e.message.should == "#{basic_message}\nnil was passed to the PageObject constructor instead of a valid browser object."
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,405 +1,405 @@
1
- require 'spec_helper'
2
-
3
- class PageObjectTestPageObject
4
- include PageObject
5
- end
6
-
7
- class CustomPlatform
8
- end
9
-
10
- describe PageObject do
11
- let(:watir_browser) { mock_watir_browser }
12
- let(:selenium_browser) { mock_selenium_browser }
13
- let(:watir_page_object) { PageObjectTestPageObject.new(watir_browser) }
14
- let(:selenium_page_object) { PageObjectTestPageObject.new(selenium_browser) }
15
-
16
- context "setting values on the PageObject module" do
17
- it "should set the javascript framework" do
18
- PageObject::JavascriptFrameworkFacade.should_receive(:framework=)
19
- PageObject.javascript_framework = :foo
20
- end
21
-
22
- it "should add a new Javascript Framework" do
23
- PageObject::JavascriptFrameworkFacade.should_receive(:add_framework)
24
- PageObject.add_framework(:foo, :bar)
25
- end
26
-
27
- it "should set a default page wait value" do
28
- PageObject.default_page_wait = 20
29
- wait = PageObject.instance_variable_get("@page_wait")
30
- wait.should == 20
31
- end
32
-
33
- it "should provide the default page wait value" do
34
- PageObject.instance_variable_set("@page_wait", 10)
35
- PageObject.default_page_wait.should == 10
36
- end
37
-
38
- it "should default the page wait value to 30" do
39
- PageObject.instance_variable_set("@page_wait", nil)
40
- PageObject.default_page_wait.should == 30
41
- end
42
-
43
- it "should set the default element wait value" do
44
- PageObject.default_element_wait = 20
45
- wait = PageObject.instance_variable_get("@element_wait")
46
- wait.should == 20
47
- end
48
-
49
- it "should provide the default element wait value" do
50
- PageObject.instance_variable_set("@element_wait", 10)
51
- PageObject.default_element_wait.should == 10
52
- end
53
-
54
- it "should default the element wait to 5" do
55
- PageObject.instance_variable_set("@element_wait", nil)
56
- PageObject.default_element_wait.should == 5
57
- end
58
- end
59
-
60
- context "setting values on the PageObject class instance" do
61
- it "should set the params value" do
62
- PageObjectTestPageObject.params = {:some => :value}
63
- params = PageObjectTestPageObject.instance_variable_get("@params")
64
- params[:some].should == :value
65
- end
66
-
67
- it "should provide the params value" do
68
- PageObjectTestPageObject.instance_variable_set("@params", {:value => :updated})
69
- PageObjectTestPageObject.params[:value].should == :updated
70
- end
71
-
72
- it "should default the params to an empty hash" do
73
- PageObjectTestPageObject.instance_variable_set("@params", nil)
74
- PageObjectTestPageObject.params.should == {}
75
- end
76
- end
77
-
78
- context "when created with a watir-webdriver browser" do
79
- it "should include the WatirPageObject module" do
80
- watir_page_object.platform.should be_kind_of PageObject::Platforms::WatirWebDriver::PageObject
81
- end
82
- end
83
-
84
- context "when created with a selenium browser" do
85
- it "should include the SeleniumPageObject module" do
86
- selenium_page_object.platform.should be_kind_of PageObject::Platforms::SeleniumWebDriver::PageObject
87
- end
88
- end
89
-
90
- context "when created with a non_bundled adapter" do
91
- let(:custom_adapter) { mock_adapter(:custom_browser, CustomPlatform) }
92
- it "should be an instance of whatever that objects adapter is" do
93
- mock_adapters({:custom_adapter=>custom_adapter})
94
- custom_page_object = PageObjectTestPageObject.new(:custom_browser)
95
- custom_page_object.platform.should be custom_adapter.create_page_object
96
- end
97
- end
98
-
99
- context "when created with an object we do not understand" do
100
- it "should throw an error" do
101
- expect {
102
- TestPageObject.new("blah")
103
- }.to raise_error
104
- end
105
- end
106
-
107
- describe "page level functionality" do
108
- context "for all drivers" do
109
- it "should try a second time after sleeping when attach to window fails" do
110
- watir_page_object.platform.should_receive(:attach_to_window).once.and_throw "error"
111
- watir_page_object.platform.should_receive(:attach_to_window)
112
- watir_page_object.attach_to_window("blah")
113
- end
114
-
115
- it "should call initialize_page if it exists" do
116
- class CallbackPage
117
- include PageObject
118
- attr_reader :initialize_page_called
119
-
120
- def initialize_page
121
- @initialize_page_called = true
122
- end
123
- end
124
-
125
- @page = CallbackPage.new(watir_browser)
126
- @page.initialize_page_called.should be true
127
- end
128
-
129
- it "should call initialize_accessors if it exists" do
130
- class CallbackPage
131
- include PageObject
132
- attr_reader :initialize_accessors_called
133
-
134
- def initialize_accessors
135
- @initialize_accessors_called = true
136
- end
137
- end
138
-
139
- @page = CallbackPage.new(watir_browser)
140
- @page.initialize_accessors_called.should be true
141
- end
142
-
143
- it "should call initialize_accessors before initialize_page if both exist" do
144
- class CallbackPage
145
- include PageObject
146
- attr_reader :initialize_page, :initialize_accessors
147
-
148
- def initialize_page
149
- @initialize_accessors = Time.now
150
- end
151
-
152
- def initialize_page
153
- @initialize_accessors = Time.now
154
- end
155
- end
156
-
157
- @page = CallbackPage.new(watir_browser)
158
- @page.initialize_accessors.usec.should be <= @page.initialize_page.usec
159
- end
160
-
161
- it "should know which element has focus" do
162
- watir_browser.should_receive(:execute_script).and_return(watir_browser)
163
- watir_browser.should_receive(:tag_name).twice.and_return(:input)
164
- watir_browser.should_receive(:type).and_return(:submit)
165
- watir_page_object.element_with_focus.class.should == PageObject::Elements::Button
166
- end
167
- end
168
-
169
- context "when using WatirPageObject" do
170
- it "should display the page text" do
171
- watir_browser.should_receive(:text).and_return("browser text")
172
- watir_page_object.text.should == "browser text"
173
- end
174
-
175
- it "should display the html of the page" do
176
- watir_browser.should_receive(:html).and_return("<html>Some Sample HTML</html>")
177
- watir_page_object.html.should == "<html>Some Sample HTML</html>"
178
- end
179
-
180
- it "should display the title of the page" do
181
- watir_browser.should_receive(:title).and_return("I am the title of a page")
182
- watir_page_object.title.should == "I am the title of a page"
183
- end
184
-
185
- it "should be able to navigate to a page" do
186
- watir_browser.should_receive(:goto).with("cheezyworld.com")
187
- watir_page_object.navigate_to("cheezyworld.com")
188
- end
189
-
190
- it "should wait until a block returns true" do
191
- watir_browser.should_receive(:wait_until).with(5, "too long")
192
- watir_page_object.wait_until(5, "too long")
193
- end
194
-
195
- it "should use the overriden timeout value when set" do
196
- PageObject.default_page_wait = 10
197
- watir_browser.should_receive(:wait_until).with(10, nil)
198
- watir_page_object.wait_until
199
- end
200
-
201
- it "should wait until there are no pending ajax requests" do
202
- PageObject::JavascriptFrameworkFacade.should_receive(:pending_requests).and_return('pending requests')
203
- watir_browser.should_receive(:execute_script).with('pending requests').and_return(0)
204
- watir_page_object.wait_for_ajax
205
- end
206
-
207
- it "should override alert popup behavior" do
208
- watir_browser.should_receive(:alert).exactly(3).times.and_return(watir_browser)
209
- watir_browser.should_receive(:exists?).and_return(true)
210
- watir_browser.should_receive(:text)
211
- watir_browser.should_receive(:ok)
212
- watir_page_object.alert do
213
- end
214
- end
215
-
216
- it "should override confirm popup behavior" do
217
- watir_browser.should_receive(:alert).exactly(3).times.and_return(watir_browser)
218
- watir_browser.should_receive(:exists?).and_return(true)
219
- watir_browser.should_receive(:text)
220
- watir_browser.should_receive(:ok)
221
- watir_page_object.confirm(true) do
222
- end
223
- end
224
-
225
- it "should override prompt popup behavior" do
226
- watir_browser.should_receive(:wd).twice.and_return(watir_browser)
227
- watir_browser.should_receive(:execute_script).twice
228
- watir_page_object.prompt("blah") do
229
- end
230
- end
231
-
232
- it "should execute javascript on the browser" do
233
- watir_browser.should_receive(:execute_script).and_return("abc")
234
- watir_page_object.execute_script("333").should == "abc"
235
- end
236
-
237
- it "should convert a modal popup to a window" do
238
- watir_browser.should_receive(:execute_script)
239
- watir_page_object.modal_dialog {}
240
- end
241
-
242
- it "should switch to a new window with a given title" do
243
- watir_browser.should_receive(:window).with(:title => /My\ Title/).and_return(watir_browser)
244
- watir_browser.should_receive(:use)
245
- watir_page_object.attach_to_window(:title => "My Title")
246
- end
247
-
248
- it "should switch to a new window with a given url" do
249
- watir_browser.should_receive(:window).with(:url => /success\.html/).and_return(watir_browser)
250
- watir_browser.should_receive(:use)
251
- watir_page_object.attach_to_window(:url => "success.html")
252
- end
253
-
254
- it "should refresh the page contents" do
255
- watir_browser.should_receive(:refresh)
256
- watir_page_object.refresh
257
- end
258
-
259
- it "should know how to go back" do
260
- watir_browser.should_receive(:back)
261
- watir_page_object.back
262
- end
263
-
264
- it "should know how to go forward" do
265
- watir_browser.should_receive(:forward)
266
- watir_page_object.forward
267
- end
268
-
269
- it "should know its' current url" do
270
- watir_browser.should_receive(:url).and_return("cheezyworld.com")
271
- watir_page_object.current_url.should == "cheezyworld.com"
272
- end
273
-
274
- it "should know how to clear all of the cookies from the browser" do
275
- watir_browser.should_receive(:cookies).and_return(watir_browser)
276
- watir_browser.should_receive(:clear)
277
- watir_page_object.clear_cookies
278
- end
279
-
280
- it "should be able to save a screenshot" do
281
- watir_browser.should_receive(:wd).and_return(watir_browser)
282
- watir_browser.should_receive(:save_screenshot)
283
- watir_page_object.save_screenshot("test.png")
284
- end
285
- end
286
-
287
- context "when using SeleniumPageObject" do
288
- it "should display the page text" do
289
- selenium_browser.stub_chain(:find_element, :text).and_return("browser text")
290
- selenium_page_object.text.should == "browser text"
291
- end
292
-
293
- it "should display the html of the page" do
294
- selenium_browser.should_receive(:page_source).and_return("<html>Some Sample HTML</html>")
295
- selenium_page_object.html.should == "<html>Some Sample HTML</html>"
296
- end
297
-
298
- it "should display the title of the page" do
299
- selenium_browser.should_receive(:title).and_return("I am the title of a page")
300
- selenium_page_object.title.should == "I am the title of a page"
301
- end
302
-
303
- it "should be able to navigate to a page" do
304
- selenium_browser.stub_chain(:navigate, :to).with('cheezyworld.com')
305
- selenium_page_object.navigate_to('cheezyworld.com')
306
- end
307
-
308
- it "should wait until a block returns true" do
309
- wait = double('wait')
310
- Selenium::WebDriver::Wait.should_receive(:new).with({:timeout => 5, :message => 'too long'}).and_return(wait)
311
- wait.should_receive(:until)
312
- selenium_page_object.wait_until(5, 'too long')
313
- end
314
-
315
- it "should wait until there are no pending ajax requests" do
316
- PageObject::JavascriptFrameworkFacade.should_receive(:pending_requests).and_return('pending requests')
317
- selenium_browser.should_receive(:execute_script).with('pending requests').and_return(0)
318
- selenium_page_object.wait_for_ajax
319
- end
320
-
321
- it "should override alert popup behavior" do
322
- selenium_browser.should_receive(:switch_to).and_return(selenium_browser)
323
- selenium_browser.should_receive(:alert).and_return(selenium_browser)
324
- selenium_browser.should_receive(:text)
325
- selenium_browser.should_receive(:accept)
326
- selenium_page_object.alert do
327
- end
328
- end
329
-
330
- it "should override confirm popup behavior" do
331
- selenium_browser.should_receive(:switch_to).and_return(selenium_browser)
332
- selenium_browser.should_receive(:alert).and_return(selenium_browser)
333
- selenium_browser.should_receive(:text)
334
- selenium_browser.should_receive(:accept)
335
- selenium_page_object.confirm(true) do
336
- end
337
- end
338
- it "should override prompt popup behavior" do
339
- selenium_browser.should_receive(:execute_script).twice
340
- selenium_page_object.prompt("blah") do
341
- end
342
- end
343
-
344
- it "should convert a modal popup to a window" do
345
- selenium_browser.should_receive(:execute_script)
346
- selenium_page_object.modal_dialog {}
347
- end
348
-
349
- it "should execute javascript on the browser" do
350
- selenium_browser.should_receive(:execute_script).and_return("abc")
351
- selenium_page_object.execute_script("333").should == "abc"
352
- end
353
-
354
- it "should switch to a new window with a given title" do
355
- selenium_browser.should_receive(:window_handles).and_return(["win1"])
356
- selenium_browser.should_receive(:switch_to).twice.and_return(selenium_browser)
357
- selenium_browser.should_receive(:window).twice.with("win1").and_return(selenium_browser)
358
- selenium_browser.should_receive(:title).and_return("My Title")
359
- selenium_page_object.attach_to_window(:title => "My Title")
360
- end
361
-
362
- it "should switch to a new window with a given url" do
363
- selenium_browser.should_receive(:window_handles).and_return(["win1"])
364
- selenium_browser.should_receive(:switch_to).twice.and_return(selenium_browser)
365
- selenium_browser.should_receive(:window).twice.with("win1").and_return(selenium_browser)
366
- selenium_browser.should_receive(:current_url).and_return("page.html")
367
- selenium_page_object.attach_to_window(:url => "page.html")
368
- end
369
-
370
- it "should refresh the page contents" do
371
- selenium_browser.should_receive(:navigate).and_return(selenium_browser)
372
- selenium_browser.should_receive(:refresh)
373
- selenium_page_object.refresh
374
- end
375
-
376
- it "should know how to go back" do
377
- selenium_browser.should_receive(:navigate).and_return(selenium_browser)
378
- selenium_browser.should_receive(:back)
379
- selenium_page_object.back
380
- end
381
-
382
- it "should know how to go forward" do
383
- selenium_browser.should_receive(:navigate).and_return(selenium_browser)
384
- selenium_browser.should_receive(:forward)
385
- selenium_page_object.forward
386
- end
387
-
388
- it "should know its' current url" do
389
- selenium_browser.should_receive(:current_url).and_return("cheezyworld.com")
390
- selenium_page_object.current_url.should == "cheezyworld.com"
391
- end
392
-
393
- it "should clear all of the cookies from the browser" do
394
- selenium_browser.should_receive(:manage).and_return(selenium_browser)
395
- selenium_browser.should_receive(:delete_all_cookies)
396
- selenium_page_object.clear_cookies
397
- end
398
-
399
- it "should be able to save a screenshot" do
400
- selenium_browser.should_receive(:save_screenshot)
401
- selenium_page_object.save_screenshot("test.png")
402
- end
403
- end
404
- end
405
- end
1
+ require 'spec_helper'
2
+
3
+ class PageObjectTestPageObject
4
+ include PageObject
5
+ end
6
+
7
+ class CustomPlatform
8
+ end
9
+
10
+ describe PageObject do
11
+ let(:watir_browser) { mock_watir_browser }
12
+ let(:selenium_browser) { mock_selenium_browser }
13
+ let(:watir_page_object) { PageObjectTestPageObject.new(watir_browser) }
14
+ let(:selenium_page_object) { PageObjectTestPageObject.new(selenium_browser) }
15
+
16
+ context "setting values on the PageObject module" do
17
+ it "should set the javascript framework" do
18
+ PageObject::JavascriptFrameworkFacade.should_receive(:framework=)
19
+ PageObject.javascript_framework = :foo
20
+ end
21
+
22
+ it "should add a new Javascript Framework" do
23
+ PageObject::JavascriptFrameworkFacade.should_receive(:add_framework)
24
+ PageObject.add_framework(:foo, :bar)
25
+ end
26
+
27
+ it "should set a default page wait value" do
28
+ PageObject.default_page_wait = 20
29
+ wait = PageObject.instance_variable_get("@page_wait")
30
+ wait.should == 20
31
+ end
32
+
33
+ it "should provide the default page wait value" do
34
+ PageObject.instance_variable_set("@page_wait", 10)
35
+ PageObject.default_page_wait.should == 10
36
+ end
37
+
38
+ it "should default the page wait value to 30" do
39
+ PageObject.instance_variable_set("@page_wait", nil)
40
+ PageObject.default_page_wait.should == 30
41
+ end
42
+
43
+ it "should set the default element wait value" do
44
+ PageObject.default_element_wait = 20
45
+ wait = PageObject.instance_variable_get("@element_wait")
46
+ wait.should == 20
47
+ end
48
+
49
+ it "should provide the default element wait value" do
50
+ PageObject.instance_variable_set("@element_wait", 10)
51
+ PageObject.default_element_wait.should == 10
52
+ end
53
+
54
+ it "should default the element wait to 5" do
55
+ PageObject.instance_variable_set("@element_wait", nil)
56
+ PageObject.default_element_wait.should == 5
57
+ end
58
+ end
59
+
60
+ context "setting values on the PageObject class instance" do
61
+ it "should set the params value" do
62
+ PageObjectTestPageObject.params = {:some => :value}
63
+ params = PageObjectTestPageObject.instance_variable_get("@params")
64
+ params[:some].should == :value
65
+ end
66
+
67
+ it "should provide the params value" do
68
+ PageObjectTestPageObject.instance_variable_set("@params", {:value => :updated})
69
+ PageObjectTestPageObject.params[:value].should == :updated
70
+ end
71
+
72
+ it "should default the params to an empty hash" do
73
+ PageObjectTestPageObject.instance_variable_set("@params", nil)
74
+ PageObjectTestPageObject.params.should == {}
75
+ end
76
+ end
77
+
78
+ context "when created with a watir-webdriver browser" do
79
+ it "should include the WatirPageObject module" do
80
+ watir_page_object.platform.should be_kind_of PageObject::Platforms::WatirWebDriver::PageObject
81
+ end
82
+ end
83
+
84
+ context "when created with a selenium browser" do
85
+ it "should include the SeleniumPageObject module" do
86
+ selenium_page_object.platform.should be_kind_of PageObject::Platforms::SeleniumWebDriver::PageObject
87
+ end
88
+ end
89
+
90
+ context "when created with a non_bundled adapter" do
91
+ let(:custom_adapter) { mock_adapter(:custom_browser, CustomPlatform) }
92
+ it "should be an instance of whatever that objects adapter is" do
93
+ mock_adapters({:custom_adapter=>custom_adapter})
94
+ custom_page_object = PageObjectTestPageObject.new(:custom_browser)
95
+ custom_page_object.platform.should be custom_adapter.create_page_object
96
+ end
97
+ end
98
+
99
+ context "when created with an object we do not understand" do
100
+ it "should throw an error" do
101
+ expect {
102
+ TestPageObject.new("blah")
103
+ }.to raise_error
104
+ end
105
+ end
106
+
107
+ describe "page level functionality" do
108
+ context "for all drivers" do
109
+ it "should try a second time after sleeping when attach to window fails" do
110
+ watir_page_object.platform.should_receive(:attach_to_window).once.and_throw "error"
111
+ watir_page_object.platform.should_receive(:attach_to_window)
112
+ watir_page_object.attach_to_window("blah")
113
+ end
114
+
115
+ it "should call initialize_page if it exists" do
116
+ class CallbackPage
117
+ include PageObject
118
+ attr_reader :initialize_page_called
119
+
120
+ def initialize_page
121
+ @initialize_page_called = true
122
+ end
123
+ end
124
+
125
+ @page = CallbackPage.new(watir_browser)
126
+ @page.initialize_page_called.should be true
127
+ end
128
+
129
+ it "should call initialize_accessors if it exists" do
130
+ class CallbackPage
131
+ include PageObject
132
+ attr_reader :initialize_accessors_called
133
+
134
+ def initialize_accessors
135
+ @initialize_accessors_called = true
136
+ end
137
+ end
138
+
139
+ @page = CallbackPage.new(watir_browser)
140
+ @page.initialize_accessors_called.should be true
141
+ end
142
+
143
+ it "should call initialize_accessors before initialize_page if both exist" do
144
+ class CallbackPage
145
+ include PageObject
146
+ attr_reader :initialize_page, :initialize_accessors
147
+
148
+ def initialize_page
149
+ @initialize_accessors = Time.now
150
+ end
151
+
152
+ def initialize_page
153
+ @initialize_accessors = Time.now
154
+ end
155
+ end
156
+
157
+ @page = CallbackPage.new(watir_browser)
158
+ @page.initialize_accessors.usec.should be <= @page.initialize_page.usec
159
+ end
160
+
161
+ it "should know which element has focus" do
162
+ watir_browser.should_receive(:execute_script).and_return(watir_browser)
163
+ watir_browser.should_receive(:tag_name).twice.and_return(:input)
164
+ watir_browser.should_receive(:type).and_return(:submit)
165
+ watir_page_object.element_with_focus.class.should == PageObject::Elements::Button
166
+ end
167
+ end
168
+
169
+ context "when using WatirPageObject" do
170
+ it "should display the page text" do
171
+ watir_browser.should_receive(:text).and_return("browser text")
172
+ watir_page_object.text.should == "browser text"
173
+ end
174
+
175
+ it "should display the html of the page" do
176
+ watir_browser.should_receive(:html).and_return("<html>Some Sample HTML</html>")
177
+ watir_page_object.html.should == "<html>Some Sample HTML</html>"
178
+ end
179
+
180
+ it "should display the title of the page" do
181
+ watir_browser.should_receive(:title).and_return("I am the title of a page")
182
+ watir_page_object.title.should == "I am the title of a page"
183
+ end
184
+
185
+ it "should be able to navigate to a page" do
186
+ watir_browser.should_receive(:goto).with("cheezyworld.com")
187
+ watir_page_object.navigate_to("cheezyworld.com")
188
+ end
189
+
190
+ it "should wait until a block returns true" do
191
+ watir_browser.should_receive(:wait_until).with(5, "too long")
192
+ watir_page_object.wait_until(5, "too long")
193
+ end
194
+
195
+ it "should use the overriden timeout value when set" do
196
+ PageObject.default_page_wait = 10
197
+ watir_browser.should_receive(:wait_until).with(10, nil)
198
+ watir_page_object.wait_until
199
+ end
200
+
201
+ it "should wait until there are no pending ajax requests" do
202
+ PageObject::JavascriptFrameworkFacade.should_receive(:pending_requests).and_return('pending requests')
203
+ watir_browser.should_receive(:execute_script).with('pending requests').and_return(0)
204
+ watir_page_object.wait_for_ajax
205
+ end
206
+
207
+ it "should override alert popup behavior" do
208
+ watir_browser.should_receive(:alert).exactly(3).times.and_return(watir_browser)
209
+ watir_browser.should_receive(:exists?).and_return(true)
210
+ watir_browser.should_receive(:text)
211
+ watir_browser.should_receive(:ok)
212
+ watir_page_object.alert do
213
+ end
214
+ end
215
+
216
+ it "should override confirm popup behavior" do
217
+ watir_browser.should_receive(:alert).exactly(3).times.and_return(watir_browser)
218
+ watir_browser.should_receive(:exists?).and_return(true)
219
+ watir_browser.should_receive(:text)
220
+ watir_browser.should_receive(:ok)
221
+ watir_page_object.confirm(true) do
222
+ end
223
+ end
224
+
225
+ it "should override prompt popup behavior" do
226
+ watir_browser.should_receive(:wd).twice.and_return(watir_browser)
227
+ watir_browser.should_receive(:execute_script).twice
228
+ watir_page_object.prompt("blah") do
229
+ end
230
+ end
231
+
232
+ it "should execute javascript on the browser" do
233
+ watir_browser.should_receive(:execute_script).and_return("abc")
234
+ watir_page_object.execute_script("333").should == "abc"
235
+ end
236
+
237
+ it "should convert a modal popup to a window" do
238
+ watir_browser.should_receive(:execute_script)
239
+ watir_page_object.modal_dialog {}
240
+ end
241
+
242
+ it "should switch to a new window with a given title" do
243
+ watir_browser.should_receive(:window).with(:title => /My\ Title/).and_return(watir_browser)
244
+ watir_browser.should_receive(:use)
245
+ watir_page_object.attach_to_window(:title => "My Title")
246
+ end
247
+
248
+ it "should switch to a new window with a given url" do
249
+ watir_browser.should_receive(:window).with(:url => /success\.html/).and_return(watir_browser)
250
+ watir_browser.should_receive(:use)
251
+ watir_page_object.attach_to_window(:url => "success.html")
252
+ end
253
+
254
+ it "should refresh the page contents" do
255
+ watir_browser.should_receive(:refresh)
256
+ watir_page_object.refresh
257
+ end
258
+
259
+ it "should know how to go back" do
260
+ watir_browser.should_receive(:back)
261
+ watir_page_object.back
262
+ end
263
+
264
+ it "should know how to go forward" do
265
+ watir_browser.should_receive(:forward)
266
+ watir_page_object.forward
267
+ end
268
+
269
+ it "should know its' current url" do
270
+ watir_browser.should_receive(:url).and_return("cheezyworld.com")
271
+ watir_page_object.current_url.should == "cheezyworld.com"
272
+ end
273
+
274
+ it "should know how to clear all of the cookies from the browser" do
275
+ watir_browser.should_receive(:cookies).and_return(watir_browser)
276
+ watir_browser.should_receive(:clear)
277
+ watir_page_object.clear_cookies
278
+ end
279
+
280
+ it "should be able to save a screenshot" do
281
+ watir_browser.should_receive(:wd).and_return(watir_browser)
282
+ watir_browser.should_receive(:save_screenshot)
283
+ watir_page_object.save_screenshot("test.png")
284
+ end
285
+ end
286
+
287
+ context "when using SeleniumPageObject" do
288
+ it "should display the page text" do
289
+ selenium_browser.stub_chain(:find_element, :text).and_return("browser text")
290
+ selenium_page_object.text.should == "browser text"
291
+ end
292
+
293
+ it "should display the html of the page" do
294
+ selenium_browser.should_receive(:page_source).and_return("<html>Some Sample HTML</html>")
295
+ selenium_page_object.html.should == "<html>Some Sample HTML</html>"
296
+ end
297
+
298
+ it "should display the title of the page" do
299
+ selenium_browser.should_receive(:title).and_return("I am the title of a page")
300
+ selenium_page_object.title.should == "I am the title of a page"
301
+ end
302
+
303
+ it "should be able to navigate to a page" do
304
+ selenium_browser.stub_chain(:navigate, :to).with('cheezyworld.com')
305
+ selenium_page_object.navigate_to('cheezyworld.com')
306
+ end
307
+
308
+ it "should wait until a block returns true" do
309
+ wait = double('wait')
310
+ Selenium::WebDriver::Wait.should_receive(:new).with({:timeout => 5, :message => 'too long'}).and_return(wait)
311
+ wait.should_receive(:until)
312
+ selenium_page_object.wait_until(5, 'too long')
313
+ end
314
+
315
+ it "should wait until there are no pending ajax requests" do
316
+ PageObject::JavascriptFrameworkFacade.should_receive(:pending_requests).and_return('pending requests')
317
+ selenium_browser.should_receive(:execute_script).with('pending requests').and_return(0)
318
+ selenium_page_object.wait_for_ajax
319
+ end
320
+
321
+ it "should override alert popup behavior" do
322
+ selenium_browser.should_receive(:switch_to).and_return(selenium_browser)
323
+ selenium_browser.should_receive(:alert).and_return(selenium_browser)
324
+ selenium_browser.should_receive(:text)
325
+ selenium_browser.should_receive(:accept)
326
+ selenium_page_object.alert do
327
+ end
328
+ end
329
+
330
+ it "should override confirm popup behavior" do
331
+ selenium_browser.should_receive(:switch_to).and_return(selenium_browser)
332
+ selenium_browser.should_receive(:alert).and_return(selenium_browser)
333
+ selenium_browser.should_receive(:text)
334
+ selenium_browser.should_receive(:accept)
335
+ selenium_page_object.confirm(true) do
336
+ end
337
+ end
338
+ it "should override prompt popup behavior" do
339
+ selenium_browser.should_receive(:execute_script).twice
340
+ selenium_page_object.prompt("blah") do
341
+ end
342
+ end
343
+
344
+ it "should convert a modal popup to a window" do
345
+ selenium_browser.should_receive(:execute_script)
346
+ selenium_page_object.modal_dialog {}
347
+ end
348
+
349
+ it "should execute javascript on the browser" do
350
+ selenium_browser.should_receive(:execute_script).and_return("abc")
351
+ selenium_page_object.execute_script("333").should == "abc"
352
+ end
353
+
354
+ it "should switch to a new window with a given title" do
355
+ selenium_browser.should_receive(:window_handles).and_return(["win1"])
356
+ selenium_browser.should_receive(:switch_to).twice.and_return(selenium_browser)
357
+ selenium_browser.should_receive(:window).twice.with("win1").and_return(selenium_browser)
358
+ selenium_browser.should_receive(:title).and_return("My Title")
359
+ selenium_page_object.attach_to_window(:title => "My Title")
360
+ end
361
+
362
+ it "should switch to a new window with a given url" do
363
+ selenium_browser.should_receive(:window_handles).and_return(["win1"])
364
+ selenium_browser.should_receive(:switch_to).twice.and_return(selenium_browser)
365
+ selenium_browser.should_receive(:window).twice.with("win1").and_return(selenium_browser)
366
+ selenium_browser.should_receive(:current_url).and_return("page.html")
367
+ selenium_page_object.attach_to_window(:url => "page.html")
368
+ end
369
+
370
+ it "should refresh the page contents" do
371
+ selenium_browser.should_receive(:navigate).and_return(selenium_browser)
372
+ selenium_browser.should_receive(:refresh)
373
+ selenium_page_object.refresh
374
+ end
375
+
376
+ it "should know how to go back" do
377
+ selenium_browser.should_receive(:navigate).and_return(selenium_browser)
378
+ selenium_browser.should_receive(:back)
379
+ selenium_page_object.back
380
+ end
381
+
382
+ it "should know how to go forward" do
383
+ selenium_browser.should_receive(:navigate).and_return(selenium_browser)
384
+ selenium_browser.should_receive(:forward)
385
+ selenium_page_object.forward
386
+ end
387
+
388
+ it "should know its' current url" do
389
+ selenium_browser.should_receive(:current_url).and_return("cheezyworld.com")
390
+ selenium_page_object.current_url.should == "cheezyworld.com"
391
+ end
392
+
393
+ it "should clear all of the cookies from the browser" do
394
+ selenium_browser.should_receive(:manage).and_return(selenium_browser)
395
+ selenium_browser.should_receive(:delete_all_cookies)
396
+ selenium_page_object.clear_cookies
397
+ end
398
+
399
+ it "should be able to save a screenshot" do
400
+ selenium_browser.should_receive(:save_screenshot)
401
+ selenium_page_object.save_screenshot("test.png")
402
+ end
403
+ end
404
+ end
405
+ end