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,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Area do
|
5
|
+
let(:area) { PageObject::Elements::Area }
|
6
|
+
|
7
|
+
context "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
10
|
+
identifier = area.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
|
+
key, value = area.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "implementation" do
|
24
|
+
let(:area_element) { double('area_element') }
|
25
|
+
|
26
|
+
context "when using selenium" do
|
27
|
+
let(:selenium_area) { PageObject::Elements::Area.new(area_element, :platform => :selenium_webdriver) }
|
28
|
+
|
29
|
+
it "should know its coords" do
|
30
|
+
area_element.should_receive(:attribute).with(:coords).and_return("1,2,3,4")
|
31
|
+
selenium_area.coords.should == "1,2,3,4"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should know its shape" do
|
35
|
+
area_element.should_receive(:attribute).with(:shape).and_return('circle')
|
36
|
+
selenium_area.shape.should == 'circle'
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should know its href" do
|
40
|
+
area_element.should_receive(:attribute).with(:href).and_return('twitter.com')
|
41
|
+
selenium_area.href.should == 'twitter.com'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Button do
|
5
|
+
let(:button) { PageObject::Elements::Button }
|
6
|
+
|
7
|
+
context "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :name, :value, :xpath, :src, :alt, :css].each do |t|
|
10
|
+
identifier = button.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :index, :name, :value, :xpath, :src, :alt, :css].each do |t|
|
17
|
+
key, value = button.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "interface" do
|
24
|
+
let(:button_element) { double('button_element') }
|
25
|
+
|
26
|
+
it "should register with type :submit" do
|
27
|
+
::PageObject::Elements.element_class_for(:input, :submit).should == ::PageObject::Elements::Button
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should register with type :image" do
|
31
|
+
::PageObject::Elements.element_class_for(:input, :image).should == ::PageObject::Elements::Button
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should register with type :button" do
|
35
|
+
::PageObject::Elements.element_class_for(:input, :button).should == ::PageObject::Elements::Button
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should retisger with type :reset" do
|
39
|
+
::PageObject::Elements.element_class_for(:input, :reset).should == ::PageObject::Elements::Button
|
40
|
+
end
|
41
|
+
|
42
|
+
context "for selenium" do
|
43
|
+
it "should return error when asked for its' text" do
|
44
|
+
button = PageObject::Elements::Button.new(button_element, :platform => :selenium_webdriver)
|
45
|
+
lambda { button.text }.should raise_error
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Canvas do
|
5
|
+
let(:area) { PageObject::Elements::Canvas }
|
6
|
+
|
7
|
+
context "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
10
|
+
identifier = area.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
|
+
key, value = area.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "implementation" do
|
24
|
+
let(:canvas_element) { double('canvas_element') }
|
25
|
+
|
26
|
+
context "when using selenium" do
|
27
|
+
let(:selenium_canvas) { PageObject::Elements::Canvas.new(canvas_element, :platform => :selenium_webdriver) }
|
28
|
+
|
29
|
+
it "should know its width" do
|
30
|
+
canvas_element.should_receive(:attribute).with(:width).and_return("400")
|
31
|
+
selenium_canvas.width.should == 400
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should know its height" do
|
35
|
+
canvas_element.should_receive(:attribute).with(:height).and_return("100")
|
36
|
+
selenium_canvas.height.should == 100
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::CheckBox do
|
5
|
+
let(:checkbox) { PageObject::Elements::CheckBox }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :name, :xpath, :value].each do |t|
|
10
|
+
identifier = checkbox.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
it "should map selenium types to same" do
|
15
|
+
[:class, :id, :name, :xpath, :index, :value].each do |t|
|
16
|
+
key, value = checkbox.selenium_identifier_for t => 'value'
|
17
|
+
key.should == t
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "interface" do
|
23
|
+
let(:check_box) { double('check_box') }
|
24
|
+
let(:selenium_cb) { PageObject::Elements::CheckBox.new(check_box, :platform => :selenium_webdriver) }
|
25
|
+
|
26
|
+
it "should register with type :checkbox" do
|
27
|
+
::PageObject::Elements.element_class_for(:input, :checkbox).should == ::PageObject::Elements::CheckBox
|
28
|
+
end
|
29
|
+
|
30
|
+
context "for selenium" do
|
31
|
+
it "should check" do
|
32
|
+
check_box.should_receive(:click)
|
33
|
+
check_box.should_receive(:selected?).and_return(false)
|
34
|
+
selenium_cb.check
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should uncheck" do
|
38
|
+
check_box.should_receive(:click)
|
39
|
+
check_box.should_receive(:selected?).and_return(true)
|
40
|
+
selenium_cb.uncheck
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should know if it is checked" do
|
44
|
+
check_box.should_receive(:selected?).and_return(true)
|
45
|
+
selenium_cb.should be_checked
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Div do
|
5
|
+
let(:div) { PageObject::Elements::Div }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :text, :index, :xpath, :name, :title, :css].each do |t|
|
10
|
+
identifier = div.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :text, :index, :name, :xpath, :title, :css].each do |t|
|
17
|
+
key, value = div.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "interface" do
|
23
|
+
it "should register with tag :div" do
|
24
|
+
::PageObject::Elements.element_class_for(:div).should == ::PageObject::Elements::Div
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
|
5
|
+
describe "Element" do
|
6
|
+
|
7
|
+
context "when building the identifiers for Watir" do
|
8
|
+
it "should build xpath when finding elements by name where not supported" do
|
9
|
+
['table', 'span', 'div', 'td', 'li', 'ol', 'ul'].each do |tag|
|
10
|
+
how = {:tag_name => tag, :name => 'blah'}
|
11
|
+
result = PageObject::Elements::Element.watir_identifier_for how
|
12
|
+
result[:xpath].should == ".//#{tag}[@name='blah']"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when building the identifiers for Selenium" do
|
18
|
+
def all_basic_elements
|
19
|
+
['textarea', 'select', 'a', 'div', 'span', 'table', 'td', 'img', 'form', 'li', 'ul', 'ol']
|
20
|
+
end
|
21
|
+
|
22
|
+
def all_input_elements
|
23
|
+
['text', 'hidden', 'checkbox', 'radio']
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should build xpath when index is provided for basic elements" do
|
27
|
+
all_basic_elements.each do |tag|
|
28
|
+
identifier = {:tag_name => tag, :index => 1}
|
29
|
+
how, what = PageObject::Elements::Element.selenium_identifier_for identifier
|
30
|
+
how.should == :xpath
|
31
|
+
what.should == "(.//#{tag})[2]"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should should build xpath when index is provided for input elements" do
|
36
|
+
all_input_elements.each do |tag|
|
37
|
+
identifier = {:tag_name => 'input', :type => tag, :index => 1}
|
38
|
+
how, what = PageObject::Elements::Element.selenium_identifier_for identifier
|
39
|
+
how.should == :xpath
|
40
|
+
what.should include "(.//input[@type='#{tag}'])[2]"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should build xpath when locating basic elements by name and index" do
|
45
|
+
all_basic_elements.each do |tag|
|
46
|
+
identifier = {:tag_name => tag, :name => 'blah', :index => 0}
|
47
|
+
how, what = PageObject::Elements::Element.selenium_identifier_for identifier
|
48
|
+
how.should == :xpath
|
49
|
+
what.should == "(.//#{tag}[@name='blah'])[1]"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should build xpath when locating input elements by name and index" do
|
54
|
+
all_input_elements.each do |type|
|
55
|
+
identifier = {:tag_name => 'input', :type => "#{type}", :name => 'blah', :index => 0}
|
56
|
+
how, what = PageObject::Elements::Element.selenium_identifier_for identifier
|
57
|
+
how.should == :xpath
|
58
|
+
what.should include "(.//input[@type='#{type}' and @name='blah'])[1]"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should build xpath when locating basic elements by name and class" do
|
63
|
+
all_basic_elements.each do |tag|
|
64
|
+
identifier = {:tag_name => tag, :class => 'bar', :name => 'foo'}
|
65
|
+
how, what = PageObject::Elements::Element.selenium_identifier_for identifier
|
66
|
+
how.should == :xpath
|
67
|
+
what.should == ".//#{tag}[@class='bar' and @name='foo']"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should build xpath when locating input elements by name and class" do
|
72
|
+
all_input_elements.each do |type|
|
73
|
+
identifier = {:tag_name => 'input', :type => "#{type}", :class => 'bar', :name => 'foo'}
|
74
|
+
how, what = PageObject::Elements::Element.selenium_identifier_for identifier
|
75
|
+
what.should include ".//input[@type='#{type}' and @class='bar' and @name='foo']"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "interaction with native element" do
|
81
|
+
let(:native) { double('') }
|
82
|
+
let(:element) { PageObject::Elements::Element.new(native, :platform => :watir_webdriver) }
|
83
|
+
|
84
|
+
it "should check if native is enabled" do
|
85
|
+
native.should_receive(:enabled?).and_return(true)
|
86
|
+
element.should be_enabled
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should click the native" do
|
90
|
+
native.should_receive(:click)
|
91
|
+
element.click
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should double click the native" do
|
95
|
+
native.should_receive(:double_click)
|
96
|
+
element.double_click
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should inspect the native" do
|
100
|
+
native.should_receive(:inspect)
|
101
|
+
element.inspect
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should retrieve the native's style" do
|
105
|
+
native.should_receive(:style).with('foo').and_return("cheezy_style")
|
106
|
+
element.style('foo').should == 'cheezy_style'
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should know if a native is disabled" do
|
110
|
+
native.should_receive(:enabled?).and_return(false)
|
111
|
+
element.should be_disabled
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::FileField do
|
5
|
+
|
6
|
+
describe "when mapping how to find an element" do
|
7
|
+
let(:filefield) { PageObject::Elements::FileField }
|
8
|
+
|
9
|
+
it "should map watir types to same" do
|
10
|
+
[:class, :id, :index, :name, :xpath, :title].each do |t|
|
11
|
+
identifier = filefield.watir_identifier_for t => 'value'
|
12
|
+
identifier.keys.first.should == t
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should map selenium types to same" do
|
17
|
+
[:class, :id, :index, :name, :xpath, :title].each do |t|
|
18
|
+
key, value = filefield.selenium_identifier_for t => 'value'
|
19
|
+
key.should == t
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "interface" do
|
25
|
+
let(:filefield) { double('file_field') }
|
26
|
+
|
27
|
+
it "should register as type :file" do
|
28
|
+
::PageObject::Elements.element_class_for(:input, :file).should == ::PageObject::Elements::FileField
|
29
|
+
end
|
30
|
+
|
31
|
+
context "for selenium" do
|
32
|
+
it "should set its' value" do
|
33
|
+
selenium_file_field = PageObject::Elements::FileField.new(filefield, :platform => :selenium_webdriver)
|
34
|
+
filefield.should_receive(:send_keys).with('a file')
|
35
|
+
selenium_file_field.value = 'a file'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Form do
|
5
|
+
describe "interface" do
|
6
|
+
let(:form_element) { double('form_element') }
|
7
|
+
|
8
|
+
it "should register with tag_name :form" do
|
9
|
+
::PageObject::Elements.element_class_for(:form).should == ::PageObject::Elements::Form
|
10
|
+
end
|
11
|
+
|
12
|
+
context "for watir" do
|
13
|
+
it "should submit a form" do
|
14
|
+
form = PageObject::Elements::Form.new(form_element, :platform => :watir_webdriver)
|
15
|
+
form_element.should_receive(:submit)
|
16
|
+
form.submit
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "for selenium" do
|
21
|
+
it "should submit a form" do
|
22
|
+
form = PageObject::Elements::Form.new(form_element, :platform => :selenium_webdriver)
|
23
|
+
form_element.should_receive(:submit)
|
24
|
+
form.submit
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Heading do
|
5
|
+
let(:heading) { PageObject::Elements::Heading }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
10
|
+
identifier = heading.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
|
+
key, value = heading.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "interface" do
|
24
|
+
it "should register with tag :h1" do
|
25
|
+
::PageObject::Elements.element_class_for(:h1).should == ::PageObject::Elements::Heading
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should register with tag :h2" do
|
29
|
+
::PageObject::Elements.element_class_for(:h2).should == ::PageObject::Elements::Heading
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should register with tag :h3" do
|
33
|
+
::PageObject::Elements.element_class_for(:h3).should == ::PageObject::Elements::Heading
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should register with tag :h4" do
|
37
|
+
::PageObject::Elements.element_class_for(:h4).should == ::PageObject::Elements::Heading
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should register with tag :h5" do
|
41
|
+
::PageObject::Elements.element_class_for(:h5).should == ::PageObject::Elements::Heading
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should register with tag :h6" do
|
45
|
+
::PageObject::Elements.element_class_for(:h6).should == ::PageObject::Elements::Heading
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::HiddenField do
|
5
|
+
let(:hiddenfield) { PageObject::Elements::HiddenField }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :name, :text, :xpath, :value].each do |t|
|
10
|
+
identifier = hiddenfield.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :name, :xpath, :index, :value].each do |t|
|
17
|
+
key, value = hiddenfield.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "interface" do
|
24
|
+
it "should register with type :hidden" do
|
25
|
+
::PageObject::Elements.element_class_for(:input, :hidden).should == ::PageObject::Elements::HiddenField
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Image do
|
5
|
+
let(:image) { PageObject::Elements::Image }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :name, :xpath, :alt, :src].each do |t|
|
10
|
+
identifier = image.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :index, :name, :xpath, :alt, :src].each do |t|
|
17
|
+
key, value = image.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "interface" do
|
24
|
+
let(:image_element) { double('image_element') }
|
25
|
+
|
26
|
+
before(:each) do
|
27
|
+
image_element.stub(:size).and_return(image_element)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should register with tag_name :img" do
|
31
|
+
::PageObject::Elements.element_class_for(:img).should == ::PageObject::Elements::Image
|
32
|
+
end
|
33
|
+
|
34
|
+
context "for watir" do
|
35
|
+
it "should know the images width" do
|
36
|
+
image = PageObject::Elements::Image.new(image_element, :platform => :watir_webdriver)
|
37
|
+
image_element.should_receive(:width).and_return(100)
|
38
|
+
image.width.should == 100
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should know the images height" do
|
42
|
+
image = PageObject::Elements::Image.new(image_element, :platform => :watir_webdriver)
|
43
|
+
image_element.should_receive(:height).and_return(120)
|
44
|
+
image.height.should == 120
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "for selenium" do
|
49
|
+
it "should know the images width" do
|
50
|
+
dim = double('dimension')
|
51
|
+
image = PageObject::Elements::Image.new(image_element, :platform => :selenium_webdriver)
|
52
|
+
image_element.should_receive(:size).and_return(dim)
|
53
|
+
dim.should_receive(:width).and_return(100)
|
54
|
+
image.width.should == 100
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should know the images height" do
|
58
|
+
dim = double('dimension')
|
59
|
+
image = PageObject::Elements::Image.new(image_element, :platform => :selenium_webdriver)
|
60
|
+
image_element.should_receive(:size).and_return(dim)
|
61
|
+
dim.should_receive(:height).and_return(120)
|
62
|
+
image.height.should == 120
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Label do
|
5
|
+
let(:label) { PageObject::Elements::Label }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :text, :index, :xpath].each do |t|
|
10
|
+
identifier = label.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :text, :index, :xpath].each do |t|
|
17
|
+
key, value = label.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "interface" do
|
23
|
+
it "should register with tag :label" do
|
24
|
+
::PageObject::Elements.element_class_for(:label).should == ::PageObject::Elements::Label
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Link do
|
5
|
+
let(:link) { PageObject::Elements::Link }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :href, :id, :index, :name, :text, :xpath, :css, :title].each do |t|
|
10
|
+
identifier = link.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to watir" do
|
16
|
+
[:link, :link_text].each do |t|
|
17
|
+
identifier = link.watir_identifier_for t => 'value'
|
18
|
+
identifier.keys.first.should == :text
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should map selenium types to same" do
|
23
|
+
[:class, :id, :link, :link_text, :name, :xpath, :index, :css, :title].each do |t|
|
24
|
+
key, value = link.selenium_identifier_for t => 'value'
|
25
|
+
key.should == t
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should map watir types to selenium" do
|
30
|
+
key, value = link.selenium_identifier_for :text => 'value'
|
31
|
+
key.should == :link_text
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "interface" do
|
36
|
+
let(:link_element) { double('link_element') }
|
37
|
+
|
38
|
+
it "should register with tag :a" do
|
39
|
+
::PageObject::Elements.element_class_for(:a).should == ::PageObject::Elements::Link
|
40
|
+
end
|
41
|
+
|
42
|
+
context "for selenium" do
|
43
|
+
it "should return error when asked for its' value" do
|
44
|
+
link = PageObject::Elements::Link.new(link_element, :platform => :selenium_webdriver)
|
45
|
+
lambda { link.value }.should raise_error
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::ListItem do
|
5
|
+
let(:list_item) { PageObject::Elements::ListItem }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :text, :xpath].each do |t|
|
10
|
+
identifier = list_item.watir_identifier_for t => 'value'
|
11
|
+
identifier.keys.first.should == t
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map selenium types to same" do
|
16
|
+
[:class, :id, :index, :name, :text, :xpath].each do |t|
|
17
|
+
key, value = list_item.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "interface" do
|
23
|
+
it "should register as tag_name :li" do
|
24
|
+
::PageObject::Elements.element_class_for(:li).should == ::PageObject::Elements::ListItem
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|