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.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +10 -0
- data/ChangeLog +790 -0
- data/Gemfile +13 -0
- data/Guardfile +20 -0
- data/LICENSE +20 -0
- data/README.md +141 -0
- data/Rakefile +35 -0
- data/cucumber.yml +10 -0
- data/features/area.feature +35 -0
- data/features/async.feature +30 -0
- data/features/audio.feature +68 -0
- data/features/button.feature +87 -0
- data/features/canvas.feature +37 -0
- data/features/check_box.feature +55 -0
- data/features/div.feature +45 -0
- data/features/element.feature +322 -0
- data/features/file_field.feature +40 -0
- data/features/form.feature +43 -0
- data/features/frames.feature +75 -0
- data/features/generic_elements.feature +29 -0
- data/features/gxt_table_extension.feature +24 -0
- data/features/headings.feature +97 -0
- data/features/hidden_field.feature +45 -0
- data/features/html/04-Death_Becomes_Fur.mp4 +0 -0
- data/features/html/04-Death_Becomes_Fur.oga +0 -0
- data/features/html/async.html +36 -0
- data/features/html/double_click.html +13 -0
- data/features/html/failure.html +8 -0
- data/features/html/frame_1.html +18 -0
- data/features/html/frame_2.html +16 -0
- data/features/html/frame_3.html +14 -0
- data/features/html/frames.html +12 -0
- data/features/html/hover.html +12 -0
- data/features/html/iframes.html +12 -0
- data/features/html/images/circle.png +0 -0
- data/features/html/images/img_pulpit.jpg +0 -0
- data/features/html/images/submit.gif +0 -0
- data/features/html/indexed_property.html +52 -0
- data/features/html/modal.html +17 -0
- data/features/html/modal_1.html +38 -0
- data/features/html/modal_2.html +27 -0
- data/features/html/movie.mp4 +0 -0
- data/features/html/movie.ogg +0 -0
- data/features/html/multi_elements.html +144 -0
- data/features/html/nested_elements.html +77 -0
- data/features/html/nested_frame_1.html +1 -0
- data/features/html/nested_frame_2.html +11 -0
- data/features/html/nested_frame_3.html +14 -0
- data/features/html/nested_frames.html +10 -0
- data/features/html/planets.gif +0 -0
- data/features/html/static_elements.html +206 -0
- data/features/html/success.html +8 -0
- data/features/html/sun.gif +0 -0
- data/features/html/sun.html +7 -0
- data/features/image.feature +50 -0
- data/features/indexed_property.feature +98 -0
- data/features/javascript.feature +28 -0
- data/features/label.feature +46 -0
- data/features/link.feature +52 -0
- data/features/list_item.feature +36 -0
- data/features/modal_dialog.feature +15 -0
- data/features/multi_elements.feature +486 -0
- data/features/nested_elements.feature +117 -0
- data/features/ordered_list.feature +56 -0
- data/features/page_level_actions.feature +90 -0
- data/features/paragraph.feature +35 -0
- data/features/radio_button.feature +58 -0
- data/features/radio_button_group.feature +29 -0
- data/features/sample-app/public/jquery-1.3.2.js +4376 -0
- data/features/sample-app/public/jquery.html +30 -0
- data/features/sample-app/public/prototype-1.6.0.3.js +4320 -0
- data/features/sample-app/public/prototype.html +35 -0
- data/features/sample-app/sample_app.rb +35 -0
- data/features/select_list.feature +86 -0
- data/features/span.feature +37 -0
- data/features/step_definitions/accessor_steps.rb +60 -0
- data/features/step_definitions/area_steps.rb +19 -0
- data/features/step_definitions/async_steps.rb +83 -0
- data/features/step_definitions/audio_steps.rb +27 -0
- data/features/step_definitions/button_steps.rb +43 -0
- data/features/step_definitions/canvas_steps.rb +15 -0
- data/features/step_definitions/check_box_steps.rb +35 -0
- data/features/step_definitions/div_steps.rb +19 -0
- data/features/step_definitions/element_steps.rb +266 -0
- data/features/step_definitions/file_field_steps.rb +19 -0
- data/features/step_definitions/form_steps.rb +19 -0
- data/features/step_definitions/frames_steps.rb +159 -0
- data/features/step_definitions/generic_element_steps.rb +31 -0
- data/features/step_definitions/gxt_table_steps.rb +58 -0
- data/features/step_definitions/headings_steps.rb +12 -0
- data/features/step_definitions/hidden_field_steps.rb +27 -0
- data/features/step_definitions/image_steps.rb +27 -0
- data/features/step_definitions/indexed_property_steps.rb +129 -0
- data/features/step_definitions/javascript_steps.rb +53 -0
- data/features/step_definitions/label_steps.rb +19 -0
- data/features/step_definitions/link_steps.rb +40 -0
- data/features/step_definitions/list_item_steps.rb +19 -0
- data/features/step_definitions/modal_dialog_steps.rb +62 -0
- data/features/step_definitions/multi_elements_steps.rb +528 -0
- data/features/step_definitions/nested_elements_steps.rb +212 -0
- data/features/step_definitions/ordered_list_steps.rb +23 -0
- data/features/step_definitions/page_level_actions_steps.rb +135 -0
- data/features/step_definitions/page_traversal_steps.rb +4 -0
- data/features/step_definitions/paragraph_steps.rb +28 -0
- data/features/step_definitions/radio_button_group_steps.rb +36 -0
- data/features/step_definitions/radio_button_steps.rb +27 -0
- data/features/step_definitions/select_list_steps.rb +65 -0
- data/features/step_definitions/span_steps.rb +19 -0
- data/features/step_definitions/table_cell_steps.rb +15 -0
- data/features/step_definitions/table_steps.rb +66 -0
- data/features/step_definitions/text_area_steps.rb +35 -0
- data/features/step_definitions/text_field_steps.rb +35 -0
- data/features/step_definitions/unordered_list_steps.rb +23 -0
- data/features/step_definitions/video_steps.rb +45 -0
- data/features/support/ajax_text_environment.rb +26 -0
- data/features/support/env.rb +8 -0
- data/features/support/hooks.rb +8 -0
- data/features/support/page.rb +364 -0
- data/features/support/persistent_browser.rb +70 -0
- data/features/support/targets/firefox14_osx.rb +6 -0
- data/features/support/targets/firefox14_windows7.rb +6 -0
- data/features/support/url_helper.rb +57 -0
- data/features/table.feature +114 -0
- data/features/table_cell.feature +45 -0
- data/features/text_area.feature +51 -0
- data/features/text_field.feature +70 -0
- data/features/unordered_list.feature +56 -0
- data/features/video.feature +73 -0
- data/lib/page-object/accessors.rb +1313 -0
- data/lib/page-object/core_ext/string.rb +5 -0
- data/lib/page-object/element_locators.rb +21 -0
- data/lib/page-object/elements/area.rb +31 -0
- data/lib/page-object/elements/audio.rb +9 -0
- data/lib/page-object/elements/button.rb +35 -0
- data/lib/page-object/elements/canvas.rb +23 -0
- data/lib/page-object/elements/check_box.rb +37 -0
- data/lib/page-object/elements/div.rb +19 -0
- data/lib/page-object/elements/element.rb +226 -0
- data/lib/page-object/elements/file_field.rb +38 -0
- data/lib/page-object/elements/form.rb +36 -0
- data/lib/page-object/elements/heading.rb +15 -0
- data/lib/page-object/elements/hidden_field.rb +22 -0
- data/lib/page-object/elements/image.rb +36 -0
- data/lib/page-object/elements/label.rb +36 -0
- data/lib/page-object/elements/link.rb +46 -0
- data/lib/page-object/elements/list_item.rb +19 -0
- data/lib/page-object/elements/media.rb +45 -0
- data/lib/page-object/elements/option.rb +10 -0
- data/lib/page-object/elements/ordered_list.rb +50 -0
- data/lib/page-object/elements/paragraph.rb +9 -0
- data/lib/page-object/elements/radio_button.rb +37 -0
- data/lib/page-object/elements/select_list.rb +42 -0
- data/lib/page-object/elements/span.rb +19 -0
- data/lib/page-object/elements/table.rb +68 -0
- data/lib/page-object/elements/table_cell.rb +28 -0
- data/lib/page-object/elements/table_row.rb +50 -0
- data/lib/page-object/elements/text_area.rb +38 -0
- data/lib/page-object/elements/text_field.rb +42 -0
- data/lib/page-object/elements/unordered_list.rb +51 -0
- data/lib/page-object/elements/video.rb +18 -0
- data/lib/page-object/elements.rb +59 -0
- data/lib/page-object/indexed_properties.rb +36 -0
- data/lib/page-object/javascript/jquery.rb +14 -0
- data/lib/page-object/javascript/prototype.rb +14 -0
- data/lib/page-object/javascript/yui.rb +19 -0
- data/lib/page-object/javascript_framework_facade.rb +78 -0
- data/lib/page-object/loads_platform.rb +26 -0
- data/lib/page-object/locator_generator.rb +129 -0
- data/lib/page-object/nested_elements.rb +17 -0
- data/lib/page-object/page_factory.rb +108 -0
- data/lib/page-object/page_populator.rb +92 -0
- data/lib/page-object/platforms/selenium_webdriver/button.rb +15 -0
- data/lib/page-object/platforms/selenium_webdriver/check_box.rb +29 -0
- data/lib/page-object/platforms/selenium_webdriver/element.rb +291 -0
- data/lib/page-object/platforms/selenium_webdriver/file_field.rb +16 -0
- data/lib/page-object/platforms/selenium_webdriver/form.rb +16 -0
- data/lib/page-object/platforms/selenium_webdriver/image.rb +28 -0
- data/lib/page-object/platforms/selenium_webdriver/label.rb +17 -0
- data/lib/page-object/platforms/selenium_webdriver/link.rb +23 -0
- data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +39 -0
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +1136 -0
- data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +22 -0
- data/lib/page-object/platforms/selenium_webdriver/select_list.rb +93 -0
- data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +42 -0
- data/lib/page-object/platforms/selenium_webdriver/table.rb +42 -0
- data/lib/page-object/platforms/selenium_webdriver/table_row.rb +43 -0
- data/lib/page-object/platforms/selenium_webdriver/text_area.rb +17 -0
- data/lib/page-object/platforms/selenium_webdriver/text_field.rb +17 -0
- data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +39 -0
- data/lib/page-object/platforms/selenium_webdriver.rb +18 -0
- data/lib/page-object/platforms/watir_webdriver/check_box.rb +29 -0
- data/lib/page-object/platforms/watir_webdriver/element.rb +249 -0
- data/lib/page-object/platforms/watir_webdriver/file_field.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/form.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/image.rb +22 -0
- data/lib/page-object/platforms/watir_webdriver/label.rb +17 -0
- data/lib/page-object/platforms/watir_webdriver/link.rb +15 -0
- data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +35 -0
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +1029 -0
- data/lib/page-object/platforms/watir_webdriver/radio_button.rb +22 -0
- data/lib/page-object/platforms/watir_webdriver/select_list.rb +74 -0
- data/lib/page-object/platforms/watir_webdriver/table.rb +38 -0
- data/lib/page-object/platforms/watir_webdriver/table_row.rb +37 -0
- data/lib/page-object/platforms/watir_webdriver/text_area.rb +23 -0
- data/lib/page-object/platforms/watir_webdriver/text_field.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +36 -0
- data/lib/page-object/platforms/watir_webdriver.rb +18 -0
- data/lib/page-object/platforms.rb +18 -0
- data/lib/page-object/version.rb +4 -0
- data/lib/page-object/widgets.rb +133 -0
- data/lib/page-object.rb +408 -0
- data/meeane-page-object.gemspec +32 -0
- data/pageobject.gems +1 -0
- data/spec/page-object/element_locators_spec.rb +1065 -0
- data/spec/page-object/elements/area_spec.rb +45 -0
- data/spec/page-object/elements/button_spec.rb +50 -0
- data/spec/page-object/elements/canvas_spec.rb +40 -0
- data/spec/page-object/elements/check_box_spec.rb +49 -0
- data/spec/page-object/elements/div_spec.rb +28 -0
- data/spec/page-object/elements/element_spec.rb +114 -0
- data/spec/page-object/elements/file_field_spec.rb +39 -0
- data/spec/page-object/elements/form_spec.rb +28 -0
- data/spec/page-object/elements/heading_spec.rb +48 -0
- data/spec/page-object/elements/hidden_field_spec.rb +28 -0
- data/spec/page-object/elements/image_spec.rb +66 -0
- data/spec/page-object/elements/label_spec.rb +29 -0
- data/spec/page-object/elements/link_spec.rb +49 -0
- data/spec/page-object/elements/list_item_spec.rb +28 -0
- data/spec/page-object/elements/nested_element_spec.rb +254 -0
- data/spec/page-object/elements/option_spec.rb +11 -0
- data/spec/page-object/elements/ordered_list_spec.rb +94 -0
- data/spec/page-object/elements/paragraph_spec.rb +28 -0
- data/spec/page-object/elements/select_list_spec.rb +142 -0
- data/spec/page-object/elements/selenium/radio_button_spec.rb +44 -0
- data/spec/page-object/elements/selenium/text_field_spec.rb +49 -0
- data/spec/page-object/elements/selenium_element_spec.rb +172 -0
- data/spec/page-object/elements/span_spec.rb +26 -0
- data/spec/page-object/elements/table_cell_spec.rb +21 -0
- data/spec/page-object/elements/table_row_spec.rb +70 -0
- data/spec/page-object/elements/table_spec.rb +98 -0
- data/spec/page-object/elements/text_area_spec.rb +39 -0
- data/spec/page-object/elements/unordered_list_spec.rb +95 -0
- data/spec/page-object/elements/watir_element_spec.rb +142 -0
- data/spec/page-object/javascript_framework_facade_spec.rb +61 -0
- data/spec/page-object/loads_platform_spec.rb +53 -0
- data/spec/page-object/page-object_spec.rb +405 -0
- data/spec/page-object/page_factory_spec.rb +256 -0
- data/spec/page-object/page_populator_spec.rb +122 -0
- data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +68 -0
- data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
- data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +29 -0
- data/spec/page-object/platforms/watir_webdriver_spec.rb +9 -0
- data/spec/page-object/selenium_accessors_spec.rb +589 -0
- data/spec/page-object/watir_accessors_spec.rb +1107 -0
- data/spec/page-object/widget_spec.rb +226 -0
- data/spec/spec_helper.rb +44 -0
- metadata +404 -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
|
+
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
|
+
|
@@ -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
|
+
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
|
@@ -0,0 +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
|