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