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,172 @@
|
|
1
|
+
require 'page-object/elements'
|
2
|
+
require 'selenium-webdriver'
|
3
|
+
|
4
|
+
|
5
|
+
describe "Element for Selenium" do
|
6
|
+
before(:each) do
|
7
|
+
@selenium_driver = double('selenium')
|
8
|
+
@selenium_element = ::PageObject::Elements::Element.new(@selenium_driver, :platform => :selenium_webdriver)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should know when it is visible" do
|
12
|
+
@selenium_driver.should_receive(:displayed?).and_return(true)
|
13
|
+
@selenium_element.visible?.should == true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should know when it is not visible" do
|
17
|
+
@selenium_driver.should_receive(:displayed?).and_return(false)
|
18
|
+
@selenium_element.visible?.should == false
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should know when it exists" do
|
22
|
+
@selenium_driver.should_receive(:nil?).and_return(false)
|
23
|
+
@selenium_element.exists?.should == true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should know when it does not exist" do
|
27
|
+
@selenium_element = ::PageObject::Elements::Element.new(nil, :platform => :selenium_webdriver)
|
28
|
+
@selenium_element.exists?.should == false
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should flash an element" do
|
32
|
+
bridge = double('bridge')
|
33
|
+
@selenium_driver.should_receive(:attribute).and_return('blue')
|
34
|
+
@selenium_driver.should_receive(:instance_variable_get).and_return(bridge)
|
35
|
+
bridge.should_receive(:executeScript).exactly(10).times
|
36
|
+
@selenium_element.flash
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should be able to return the text contained in the element" do
|
40
|
+
@selenium_driver.should_receive(:text).and_return("my text")
|
41
|
+
@selenium_element.text.should == "my text"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should know when it is equal to another" do
|
45
|
+
@selenium_driver.should_receive(:==).and_return(true)
|
46
|
+
@selenium_element.should == @selenium_element
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should return its tag name" do
|
50
|
+
@selenium_driver.should_receive(:tag_name).and_return("h1")
|
51
|
+
@selenium_element.tag_name.should == "h1"
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should know its value" do
|
55
|
+
@selenium_driver.should_receive(:attribute).with('value').and_return("value")
|
56
|
+
@selenium_element.value.should == "value"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should know how to retrieve the value of an attribute" do
|
60
|
+
@selenium_driver.should_receive(:attribute).and_return(true)
|
61
|
+
@selenium_element.attribute('readonly').should be true
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be clickable" do
|
65
|
+
@selenium_driver.should_receive(:click)
|
66
|
+
@selenium_element.click
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should be double clickable" do
|
70
|
+
Selenium::WebDriver::Mouse.should_receive(:new).and_return(@selenium_driver)
|
71
|
+
@selenium_driver.should_receive(:double_click)
|
72
|
+
@selenium_element.double_click
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should be right clickable" do
|
76
|
+
@selenium_driver.should_receive(:context_click)
|
77
|
+
@selenium_element.right_click
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should be able to block until it is present" do
|
81
|
+
wait = double('wait')
|
82
|
+
::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
|
83
|
+
wait.should_receive(:until)
|
84
|
+
@selenium_element.when_present(10)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should return the element when it is present" do
|
88
|
+
wait = double('wait')
|
89
|
+
::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
|
90
|
+
wait.should_receive(:until)
|
91
|
+
element = @selenium_element.when_present(10)
|
92
|
+
element.should === @selenium_element
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should return when an element is not present" do
|
96
|
+
wait = double('wait')
|
97
|
+
::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
|
98
|
+
wait.should_receive(:until)
|
99
|
+
@selenium_element.when_not_present
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should be able to block until it is visible" do
|
103
|
+
wait = double('wait')
|
104
|
+
::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
|
105
|
+
wait.should_receive(:until)
|
106
|
+
@selenium_element.when_visible(10)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should return the element when it is visible" do
|
110
|
+
wait = double('wait')
|
111
|
+
::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
|
112
|
+
wait.should_receive(:until)
|
113
|
+
element = @selenium_element.when_visible(10)
|
114
|
+
element.should === @selenium_element
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should be able to block until it is not visible" do
|
118
|
+
wait = double('wait')
|
119
|
+
::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
|
120
|
+
wait.should_receive(:until)
|
121
|
+
@selenium_element.when_not_visible(10)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should return the element when it is not visible" do
|
125
|
+
wait = double('wait')
|
126
|
+
::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
|
127
|
+
wait.should_receive(:until)
|
128
|
+
element = @selenium_element.when_not_visible(10)
|
129
|
+
element.should === @selenium_element
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should be able to block until a user define event fires true" do
|
133
|
+
wait = double('wait')
|
134
|
+
::Selenium::WebDriver::Wait.should_receive(:new).and_return(wait)
|
135
|
+
wait.should_receive(:until)
|
136
|
+
@selenium_element.wait_until(10, "Element blah") {}
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should send keys to the element" do
|
140
|
+
@selenium_driver.should_receive(:send_keys).with([:control, 'a'])
|
141
|
+
@selenium_element.send_keys([:control, 'a'])
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should clear its' contents" do
|
145
|
+
@selenium_driver.should_receive(:clear)
|
146
|
+
@selenium_element.clear
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should fire an event" do
|
150
|
+
@selenium_driver.should_receive(:instance_variable_get).with(:@bridge).and_return(@selenium_driver)
|
151
|
+
@selenium_driver.should_receive(:executeScript)
|
152
|
+
@selenium_element.fire_event('onfocus')
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should find the parent element" do
|
156
|
+
@selenium_driver.should_receive(:instance_variable_get).with(:@bridge).and_return(@selenium_driver)
|
157
|
+
@selenium_driver.should_receive(:executeScript).and_return(@selenium_driver)
|
158
|
+
@selenium_driver.should_receive(:tag_name).twice.and_return(:div)
|
159
|
+
@selenium_element.parent
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should set the focus" do
|
163
|
+
@selenium_driver.should_receive(:instance_variable_get).and_return(@selenium_driver)
|
164
|
+
@selenium_driver.should_receive(:executeScript)
|
165
|
+
@selenium_element.focus
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should scroll into view" do
|
169
|
+
@selenium_driver.should_receive(:location_once_scrolled_into_view)
|
170
|
+
@selenium_element.scroll_into_view
|
171
|
+
end
|
172
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Span do
|
5
|
+
let(:span) { PageObject::Elements::Span }
|
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, :title, :xpath].each do |t|
|
10
|
+
identifier = span.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, :title, :xpath].each do |t|
|
17
|
+
key, value = span.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should register with tag_name :span" do
|
24
|
+
::PageObject::Elements.element_class_for(:span).should == ::PageObject::Elements::Span
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::TableCell do
|
5
|
+
|
6
|
+
context "interface" do
|
7
|
+
it "should register with tag_name :td" do
|
8
|
+
::PageObject::Elements.element_class_for(:td).should == ::PageObject::Elements::TableCell
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should register with tag_name :th" do
|
12
|
+
::PageObject::Elements.element_class_for(:th).should == ::PageObject::Elements::TableCell
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should always be enabled" do
|
16
|
+
table_cell_element = double('table_cell_element')
|
17
|
+
table_cell = PageObject::Elements::TableCell.new(table_cell_element, :platform => :selenium_webdriver)
|
18
|
+
table_cell.enabled?.should be true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::TableRow do
|
5
|
+
let(:table_cell) { double('table_cell') }
|
6
|
+
let(:table_row_driver) { double('table_row_driver') }
|
7
|
+
|
8
|
+
describe "interface" do
|
9
|
+
|
10
|
+
it "should register with tag_name :tr" do
|
11
|
+
::PageObject::Elements.element_class_for(:tr).should == ::PageObject::Elements::TableRow
|
12
|
+
end
|
13
|
+
|
14
|
+
context "for selenium" do
|
15
|
+
it "should return a table cell when indexed" do
|
16
|
+
table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :selenium_webdriver)
|
17
|
+
table_row.stub(:columns).and_return(2)
|
18
|
+
table_row_driver.should_receive(:find_elements).with(:xpath, ".//child::td|th").and_return(table_cell)
|
19
|
+
table_cell.should_receive(:[]).and_return(table_cell)
|
20
|
+
table_row[0].should be_instance_of PageObject::Elements::TableCell
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should retrun the number of columns" do
|
24
|
+
table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :selenium_webdriver)
|
25
|
+
table_row_driver.should_receive(:find_elements).with(:xpath, ".//child::td|th").and_return(table_row_driver)
|
26
|
+
table_row_driver.should_receive(:size).and_return(3)
|
27
|
+
table_row.columns.should == 3
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should iterate over the table columns" do
|
31
|
+
table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :selenium_webdriver)
|
32
|
+
table_row.should_receive(:columns).and_return(2)
|
33
|
+
table_row.stub(:[]).and_return(table_row_driver)
|
34
|
+
count = 0
|
35
|
+
table_row.each { |e| count += 1 }
|
36
|
+
count.should == 2
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "for watir" do
|
41
|
+
before(:each) do
|
42
|
+
table_row_driver.stub(:find_elements).and_return(table_row_driver)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return a table cell when indexed" do
|
46
|
+
table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir_webdriver)
|
47
|
+
table_row.stub(:columns).and_return(2)
|
48
|
+
table_row_driver.should_receive(:[]).with(1).and_return(table_cell)
|
49
|
+
table_row[1].should be_instance_of PageObject::Elements::TableCell
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should return the number of columns" do
|
53
|
+
table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir_webdriver)
|
54
|
+
table_row_driver.stub(:wd).and_return(table_row_driver)
|
55
|
+
table_row_driver.should_receive(:find_elements).with(:xpath, ".//child::td|th").and_return(table_row_driver)
|
56
|
+
table_row_driver.should_receive(:size).and_return(3)
|
57
|
+
table_row.columns.should == 3
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should iterate over the table columns" do
|
61
|
+
table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir_webdriver)
|
62
|
+
table_row.should_receive(:columns).and_return(2)
|
63
|
+
table_row.stub(:[])
|
64
|
+
count = 0
|
65
|
+
table_row.each { |e| count += 1 }
|
66
|
+
count.should == 2
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::Table do
|
5
|
+
describe "when mapping how to find an element" do
|
6
|
+
it "should map watir types to same" do
|
7
|
+
[:class, :id, :index, :xpath].each do |t|
|
8
|
+
identifier = PageObject::Elements::Table.watir_identifier_for t => 'value'
|
9
|
+
identifier.keys.first.should == t
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should map selenium types to same" do
|
14
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
15
|
+
key, value = PageObject::Elements::Table.selenium_identifier_for t => 'value'
|
16
|
+
key.should == t
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "interface" do
|
22
|
+
let(:table_element) { double('table_element') }
|
23
|
+
|
24
|
+
before(:each) do
|
25
|
+
table_element.stub(:[]).and_return(table_element)
|
26
|
+
table_element.stub(:find_elements).and_return(table_element)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should register with tag_name :table" do
|
30
|
+
::PageObject::Elements.element_class_for(:table).should == ::PageObject::Elements::Table
|
31
|
+
end
|
32
|
+
|
33
|
+
context "for watir" do
|
34
|
+
let(:watir_table) { PageObject::Elements::Table.new(table_element, :platform => :watir_webdriver) }
|
35
|
+
|
36
|
+
it "should return a table row when indexed" do
|
37
|
+
table_element.stub(:[]).with(1).and_return(table_element)
|
38
|
+
watir_table[1].should be_instance_of PageObject::Elements::TableRow
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return the first row" do
|
42
|
+
table_element.stub(:[]).with(0).and_return(table_element)
|
43
|
+
watir_table.first_row.should be_instance_of PageObject::Elements::TableRow
|
44
|
+
end
|
45
|
+
|
46
|
+
it "shoudl return the last row" do
|
47
|
+
table_element.stub(:[]).with(-1).and_return(table_element)
|
48
|
+
watir_table.last_row.should be_instance_of PageObject::Elements::TableRow
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should return the number of rows" do
|
52
|
+
table_element.stub(:wd).and_return(table_element)
|
53
|
+
table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
|
54
|
+
table_element.should_receive(:size).and_return(2)
|
55
|
+
watir_table.rows.should == 2
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should iterate over the table rows" do
|
59
|
+
watir_table.should_receive(:rows).and_return(2)
|
60
|
+
count = 0
|
61
|
+
watir_table.each { |e| count += 1 }
|
62
|
+
count.should == 2
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "for selenium" do
|
67
|
+
let(:selenium_table) { PageObject::Elements::Table.new(table_element, :platform => :selenium_webdriver) }
|
68
|
+
|
69
|
+
it "should return a table row when indexed" do
|
70
|
+
table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
|
71
|
+
selenium_table[1].should be_instance_of PageObject::Elements::TableRow
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should return the first row" do
|
75
|
+
table_element.stub(:[]).with(0).and_return(table_element)
|
76
|
+
selenium_table.first_row.should be_instance_of PageObject::Elements::TableRow
|
77
|
+
end
|
78
|
+
|
79
|
+
it "shoudl return the last row" do
|
80
|
+
table_element.stub(:[]).with(-1).and_return(table_element)
|
81
|
+
selenium_table.last_row.should be_instance_of PageObject::Elements::TableRow
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return the number of rows" do
|
85
|
+
table_element.should_receive(:find_elements).with(:xpath, ".//child::tr").and_return(table_element)
|
86
|
+
table_element.should_receive(:size).and_return(2)
|
87
|
+
selenium_table.rows.should == 2
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should iterate over the table rows" do
|
91
|
+
selenium_table.should_receive(:rows).and_return(2)
|
92
|
+
count = 0
|
93
|
+
selenium_table.each { |e| count += 1 }
|
94
|
+
count.should == 2
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::TextArea do
|
5
|
+
let(:textarea) { PageObject::Elements::TextArea }
|
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 = textarea.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].each do |t|
|
17
|
+
key, value = textarea.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "interface" do
|
24
|
+
|
25
|
+
it "should register with tag_name :textarea" do
|
26
|
+
::PageObject::Elements.element_class_for(:textarea).should == ::PageObject::Elements::TextArea
|
27
|
+
end
|
28
|
+
|
29
|
+
context "for Selenium" do
|
30
|
+
it "should set its' value" do
|
31
|
+
text_area_element = double('text_area')
|
32
|
+
text_area = PageObject::Elements::TextArea.new(text_area_element, :platform => :selenium_webdriver)
|
33
|
+
text_area_element.should_receive(:clear)
|
34
|
+
text_area_element.should_receive(:send_keys).with('Joseph')
|
35
|
+
text_area.value = 'Joseph'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements'
|
3
|
+
|
4
|
+
describe PageObject::Elements::UnorderedList do
|
5
|
+
let(:ul) { PageObject::Elements::UnorderedList }
|
6
|
+
|
7
|
+
describe "when mapping how to find an element" do
|
8
|
+
it "should map watir types to same" do
|
9
|
+
[:class, :id, :index, :xpath].each do |t|
|
10
|
+
identifier = ul.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 = ul.selenium_identifier_for t => 'value'
|
18
|
+
key.should == t
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "interface" do
|
24
|
+
let(:ul_element) { double('ul_element') }
|
25
|
+
|
26
|
+
it "should register with tag_name :ul" do
|
27
|
+
::PageObject::Elements.element_class_for(:ul).should == ::PageObject::Elements::UnorderedList
|
28
|
+
end
|
29
|
+
|
30
|
+
context "for watir" do
|
31
|
+
it "should return a list item when indexed" do
|
32
|
+
ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :watir_webdriver)
|
33
|
+
ul_element.stub(:uls).and_return([ul_element])
|
34
|
+
ul_element.stub(:find_elements).and_return(ul_element)
|
35
|
+
ul_element.stub(:map).and_return([ul_element])
|
36
|
+
ul_element.stub(:parent).and_return(ul_element)
|
37
|
+
ul_element.stub(:element).and_return(ul_element)
|
38
|
+
ul_element.stub(:==).and_return(true)
|
39
|
+
ul[1]
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should know how many items it contains" do
|
43
|
+
ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :watir_webdriver)
|
44
|
+
ul_element.stub(:uls).and_return([ul_element])
|
45
|
+
ul_element.stub(:find_elements).and_return(ul_element)
|
46
|
+
ul_element.stub(:map).and_return([ul_element])
|
47
|
+
ul_element.stub(:parent).and_return(ul_element)
|
48
|
+
ul_element.stub(:element).and_return(ul_element)
|
49
|
+
ul_element.stub(:==).and_return(true)
|
50
|
+
ul.items.should == 1
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should know how to iterate over the items" do
|
54
|
+
ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :watir_webdriver)
|
55
|
+
ul.should_receive(:items).and_return(5)
|
56
|
+
ul.stub(:[])
|
57
|
+
count = 0
|
58
|
+
ul.each { |item| count += 1 }
|
59
|
+
count.should == 5
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "for selenium" do
|
64
|
+
it "should return a list item when indexed" do
|
65
|
+
ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :selenium_webdriver)
|
66
|
+
ul_element.should_receive(:find_elements).and_return(ul_element)
|
67
|
+
ul_element.should_receive(:map).and_return([ul_element])
|
68
|
+
ul_element.should_receive(:parent).and_return(ul_element)
|
69
|
+
ul_element.should_receive(:element).and_return(ul_element)
|
70
|
+
ul_element.should_receive(:==).and_return(true)
|
71
|
+
ul[1]
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should know how many items it contains" do
|
75
|
+
ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :selenium_webdriver)
|
76
|
+
ul_element.should_receive(:find_elements).and_return(ul_element)
|
77
|
+
ul_element.should_receive(:map).and_return([ul_element])
|
78
|
+
ul_element.should_receive(:parent).and_return(ul_element)
|
79
|
+
ul_element.should_receive(:element).and_return(ul_element)
|
80
|
+
ul_element.should_receive(:==).and_return(true)
|
81
|
+
ul.items.should == 1
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should know how to iterate over the items" do
|
85
|
+
ul = PageObject::Elements::UnorderedList.new(ul_element, :platform => :selenium_webdriver)
|
86
|
+
ul.should_receive(:items).and_return(5)
|
87
|
+
ul.stub(:[])
|
88
|
+
count = 0
|
89
|
+
ul.each { |item| count += 1 }
|
90
|
+
count.should == 5
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/elements/element'
|
3
|
+
|
4
|
+
describe "Element for Watir" do
|
5
|
+
let(:watir_driver) { double('watir_driver') }
|
6
|
+
let(:watir_element) { ::PageObject::Elements::Element.new(watir_driver, :platform => :watir_webdriver) }
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
Selenium::WebDriver::Mouse.stub(:new).and_return(watir_driver)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should know when it is visible" do
|
13
|
+
watir_driver.stub(:present?).and_return(true)
|
14
|
+
watir_driver.stub(:displayed?).and_return(true)
|
15
|
+
watir_element.visible?.should == true
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should know when it is not visible" do
|
19
|
+
watir_driver.stub(:present?).and_return(false)
|
20
|
+
watir_driver.stub(:displayed?).and_return(false)
|
21
|
+
watir_element.visible?.should == false
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should know when it exists" do
|
25
|
+
watir_driver.stub(:exists?).and_return(true)
|
26
|
+
watir_element.exists?.should == true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should know when it does not exist" do
|
30
|
+
watir_driver.stub(:exists?).and_return(false)
|
31
|
+
watir_driver.stub(:nil?).and_return(true)
|
32
|
+
watir_element.exists?.should == false
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should be able to return the text contained in the element" do
|
36
|
+
watir_driver.should_receive(:text).and_return("my text")
|
37
|
+
watir_element.text.should == "my text"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should know when it is equal to another" do
|
41
|
+
watir_driver.should_receive(:==).and_return(true)
|
42
|
+
watir_element.should == watir_element
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return its tag name" do
|
46
|
+
watir_driver.should_receive(:tag_name).and_return("h1")
|
47
|
+
watir_element.tag_name.should == "h1"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should know its value" do
|
51
|
+
watir_driver.stub(:value).and_return("value")
|
52
|
+
watir_driver.stub(:attribute).and_return("value")
|
53
|
+
watir_element.value.should == "value"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should know how to retrieve the value of an attribute" do
|
57
|
+
watir_driver.stub(:attribute_value).and_return(true)
|
58
|
+
watir_driver.stub(:attribute).and_return(true)
|
59
|
+
watir_element.attribute("readonly").should be true
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should be clickable" do
|
63
|
+
watir_driver.should_receive(:click)
|
64
|
+
watir_element.click
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should be double clickable" do
|
68
|
+
|
69
|
+
watir_driver.should_receive(:double_click)
|
70
|
+
watir_element.double_click
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should be right clickable" do
|
74
|
+
watir_driver.stub(:right_click)
|
75
|
+
watir_driver.stub(:context_click)
|
76
|
+
watir_element.right_click
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should be able to block until it is present" do
|
80
|
+
watir_driver.stub(:wait_until_present).with(10)
|
81
|
+
watir_element.when_present(10)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return the element when it is present" do
|
85
|
+
watir_driver.stub(:wait_until_present).with(10)
|
86
|
+
element = watir_element.when_present(10)
|
87
|
+
element.should === watir_element
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should use the overriden wait when set" do
|
91
|
+
PageObject.default_element_wait = 20
|
92
|
+
watir_driver.stub(:wait_until_present).with(20)
|
93
|
+
watir_element.when_present
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should be able to block until it is visible" do
|
97
|
+
::Watir::Wait.stub(:until).with(10, "Element was not visible in 10 seconds")
|
98
|
+
watir_driver.stub(:displayed?).and_return(true)
|
99
|
+
watir_element.when_visible(10)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should return the element when it is visible" do
|
103
|
+
::Watir::Wait.stub(:until).with(10, "Element was not visible in 10 seconds")
|
104
|
+
watir_driver.stub(:displayed?).and_return(true)
|
105
|
+
element = watir_element.when_visible(10)
|
106
|
+
element.should === watir_element
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should be able to block until it is not visible" do
|
110
|
+
::Watir::Wait.stub(:while).with(10, "Element still visible after 10 seconds")
|
111
|
+
watir_driver.stub(:displayed?).and_return(false)
|
112
|
+
watir_element.when_not_visible(10)
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should return the element when it is not visible" do
|
116
|
+
::Watir::Wait.stub(:while).with(10, "Element still visible after 10 seconds")
|
117
|
+
watir_driver.stub(:displayed?).and_return(false)
|
118
|
+
element = watir_element.when_not_visible(10)
|
119
|
+
element.should === watir_element
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should be able to block until a user define event fires true" do
|
123
|
+
::Watir::Wait.stub(:until).with(10, "Element blah")
|
124
|
+
watir_element.wait_until(10, "Element blah") {true}
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should send keys to the element" do
|
128
|
+
watir_driver.should_receive(:send_keys).with([:control, 'a'])
|
129
|
+
watir_element.send_keys([:control, 'a'])
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should clear its' contents" do
|
133
|
+
watir_driver.should_receive(:clear)
|
134
|
+
watir_element.clear
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should scroll into view" do
|
138
|
+
watir_driver.stub(:wd).and_return(watir_driver)
|
139
|
+
watir_driver.should_receive(:location_once_scrolled_into_view)
|
140
|
+
watir_element.scroll_into_view
|
141
|
+
end
|
142
|
+
end
|