page-object 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +10 -0
- data/features/check_box.feature +1 -0
- data/features/element.feature +13 -0
- data/features/hidden_field.feature +1 -0
- data/features/html/static_elements.html +7 -0
- data/features/nested_elements.feature +1 -1
- data/features/step_definitions/element_steps.rb +24 -0
- data/features/support/env.rb +0 -25
- data/features/support/hooks.rb +7 -0
- data/features/support/page.rb +3 -1
- data/features/support/persistent_browser.rb +16 -0
- data/lib/page-object/accessors.rb +2 -0
- data/lib/page-object/elements.rb +29 -0
- data/lib/page-object/elements/button.rb +5 -0
- data/lib/page-object/elements/check_box.rb +11 -0
- data/lib/page-object/elements/div.rb +3 -1
- data/lib/page-object/elements/element.rb +2 -1
- data/lib/page-object/elements/file_field.rb +3 -0
- data/lib/page-object/elements/form.rb +2 -0
- data/lib/page-object/elements/heading.rb +9 -1
- data/lib/page-object/elements/hidden_field.rb +5 -3
- data/lib/page-object/elements/image.rb +3 -1
- data/lib/page-object/elements/link.rb +3 -0
- data/lib/page-object/elements/list_item.rb +4 -1
- data/lib/page-object/elements/option.rb +3 -0
- data/lib/page-object/elements/ordered_list.rb +2 -0
- data/lib/page-object/elements/paragraph.rb +3 -1
- data/lib/page-object/elements/radio_button.rb +2 -0
- data/lib/page-object/elements/select_list.rb +2 -0
- data/lib/page-object/elements/span.rb +4 -1
- data/lib/page-object/elements/table.rb +2 -0
- data/lib/page-object/elements/table_cell.rb +5 -1
- data/lib/page-object/elements/table_row.rb +2 -0
- data/lib/page-object/elements/text_area.rb +3 -0
- data/lib/page-object/elements/text_field.rb +3 -0
- data/lib/page-object/elements/unordered_list.rb +3 -1
- data/lib/page-object/page_populator.rb +7 -3
- data/lib/page-object/platforms/selenium_webdriver/element.rb +33 -0
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +10 -8
- data/lib/page-object/platforms/watir_webdriver/element.rb +24 -0
- data/lib/page-object/platforms/watir_webdriver/file_field.rb +1 -1
- data/lib/page-object/version.rb +1 -1
- data/spec/page-object/elements/button_spec.rb +16 -0
- data/spec/page-object/elements/check_box_spec.rb +5 -2
- data/spec/page-object/elements/div_spec.rb +7 -1
- data/spec/page-object/elements/file_field_spec.rb +4 -0
- data/spec/page-object/elements/form_spec.rb +5 -1
- data/spec/page-object/elements/heading_spec.rb +27 -1
- data/spec/page-object/elements/hidden_field_spec.rb +9 -3
- data/spec/page-object/elements/image_spec.rb +4 -0
- data/spec/page-object/elements/link_spec.rb +5 -1
- data/spec/page-object/elements/list_item_spec.rb +7 -1
- data/spec/page-object/elements/option_spec.rb +11 -0
- data/spec/page-object/elements/ordered_list_spec.rb +5 -1
- data/spec/page-object/elements/paragraph_spec.rb +28 -0
- data/spec/page-object/elements/radio_button_spec.rb +5 -0
- data/spec/page-object/elements/select_list_spec.rb +4 -0
- data/spec/page-object/elements/selenium_element_spec.rb +24 -1
- data/spec/page-object/elements/span_spec.rb +5 -1
- data/spec/page-object/elements/table_cell_spec.rb +15 -0
- data/spec/page-object/elements/table_row_spec.rb +6 -1
- data/spec/page-object/elements/table_spec.rb +4 -0
- data/spec/page-object/elements/text_area_spec.rb +6 -1
- data/spec/page-object/elements/text_field_spec.rb +8 -0
- data/spec/page-object/elements/unordered_list_spec.rb +5 -1
- data/spec/page-object/page_populator_spec.rb +31 -2
- metadata +22 -12
data/ChangeLog
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== Version 0.5.5 / 2011-12-27
|
2
|
+
* Enhancements
|
3
|
+
* Added ability to find Checkbox by :value
|
4
|
+
* Added ability to find HiddenField by :value
|
5
|
+
* Added ability to find a parent of an Element
|
6
|
+
* Added #fire_event method to Element
|
7
|
+
* Added #focus method to Element
|
8
|
+
* Fixes
|
9
|
+
* Updated #populate_page_with to no longer attempt to set a value in a field that is disabled
|
10
|
+
|
1
11
|
=== Version 0.5.4 / 2011-12-18
|
2
12
|
* Enhancements
|
3
13
|
* Added deprecation warning to the method_missing method on Element. This ability will be removed in 0.6
|
data/features/check_box.feature
CHANGED
data/features/element.feature
CHANGED
@@ -253,3 +253,16 @@ Feature: Elements
|
|
253
253
|
And I should know its' tag name is "h1"
|
254
254
|
And I should know the attribute "readonly" is false
|
255
255
|
And I should be able to click it
|
256
|
+
|
257
|
+
Scenario: Firing an event
|
258
|
+
When I set the focus to the test text_field using the onfocus event
|
259
|
+
Then I should see the onfocus text "changed by onfocus event"
|
260
|
+
|
261
|
+
Scenario: Setting focus on an element
|
262
|
+
When I set the focus on the test text_field
|
263
|
+
Then I should see the onfocus text "changed by onfocus event"
|
264
|
+
|
265
|
+
Scenario: Finding a parent element
|
266
|
+
When I find the child link element
|
267
|
+
And ask for the parent element
|
268
|
+
Then I should have a div parent
|
@@ -87,6 +87,13 @@
|
|
87
87
|
<h6 id="h6_id" class="h6_class" name="h6_name">h6's are cool</h6>
|
88
88
|
|
89
89
|
<a href="success.html" target="_blank">New Window</a>
|
90
|
+
|
91
|
+
<input type="text" id="onfocus_text_field" onfocus="document.getElementById('onfocus_test').innerHTML = 'changed by onfocus event'"/>
|
92
|
+
<div id="onfocus_test"></div>
|
93
|
+
|
94
|
+
<div id="parent_div">
|
95
|
+
<a href="success.html" id="child">Success</a>
|
96
|
+
</div>
|
90
97
|
</body>
|
91
98
|
</html>
|
92
99
|
|
@@ -123,3 +123,27 @@ end
|
|
123
123
|
Then /^it should know it is not enabled$/ do
|
124
124
|
@element.should_not be_enabled
|
125
125
|
end
|
126
|
+
|
127
|
+
When /^I set the focus to the test text_field using the onfocus event$/ do
|
128
|
+
@page.text_field_element(:id => 'onfocus_text_field').fire_event('onfocus')
|
129
|
+
end
|
130
|
+
|
131
|
+
Then /^I should see the onfocus text "([^\"]*)"$/ do |text|
|
132
|
+
@page.div_element(:id => 'onfocus_test').text.should == text
|
133
|
+
end
|
134
|
+
|
135
|
+
When /^I set the focus on the test text_field$/ do
|
136
|
+
@page.text_field_element(:id => 'onfocus_text_field').focus
|
137
|
+
end
|
138
|
+
|
139
|
+
When /^I find the child link element$/ do
|
140
|
+
@element = @page.child_element
|
141
|
+
end
|
142
|
+
|
143
|
+
When /^ask for the parent element$/ do
|
144
|
+
@parent = @element.parent
|
145
|
+
end
|
146
|
+
|
147
|
+
Then /^I should have a div parent$/ do
|
148
|
+
@parent.should be_instance_of ::PageObject::Elements::Div
|
149
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -3,30 +3,5 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../../', 'lib'))
|
|
3
3
|
require 'rspec/expectations'
|
4
4
|
require 'watir-webdriver'
|
5
5
|
require 'selenium-webdriver'
|
6
|
-
|
7
6
|
require 'page-object'
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
Before do
|
12
|
-
@browser = PageObject::PersistantBrowser.get_browser
|
13
|
-
end
|
14
|
-
at_exit do
|
15
|
-
PageObject::PersistantBrowser.quit
|
16
|
-
end
|
17
|
-
|
18
|
-
module PageObject
|
19
|
-
module PersistantBrowser
|
20
|
-
@@browser = false
|
21
|
-
def self.get_browser
|
22
|
-
if !@@browser
|
23
|
-
@@browser = Watir::Browser.new :firefox if ENV['DRIVER'] == 'WATIR'
|
24
|
-
@@browser = Selenium::WebDriver.for :firefox if ENV['DRIVER'] == 'SELENIUM'
|
25
|
-
end
|
26
|
-
@@browser
|
27
|
-
end
|
28
|
-
def self.quit
|
29
|
-
@@browser.quit
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
data/features/support/page.rb
CHANGED
@@ -38,7 +38,7 @@ class Page
|
|
38
38
|
hidden_field(:hidden_field_tag_name, :tag_name => "input[type='hidden']")
|
39
39
|
hidden_field(:hidden_field_index, :index => 0)
|
40
40
|
hidden_field(:hidden_field_text, :text => "")
|
41
|
-
hidden_field(:hidden_field_value, :value => "")
|
41
|
+
hidden_field(:hidden_field_value, :value => "12345")
|
42
42
|
hidden_field(:hidden_field_class_index, :class => "hidden_field_class", :index => 0)
|
43
43
|
hidden_field(:hidden_field_name_index, :name => "hidden_field_name", :index => 0)
|
44
44
|
|
@@ -67,6 +67,7 @@ class Page
|
|
67
67
|
checkbox(:cb_class, :class => 'cb_class')
|
68
68
|
checkbox(:cb_index, :index => 0)
|
69
69
|
checkbox(:cb_xpath, :xpath => "//input[@type='checkbox']")
|
70
|
+
checkbox(:cb_value, :value => '1')
|
70
71
|
checkbox(:cb_class_index, :class => "cb_class", :index => 0)
|
71
72
|
checkbox(:cb_name_index, :name => "cb_name", :index => 0)
|
72
73
|
|
@@ -254,5 +255,6 @@ class Page
|
|
254
255
|
file_field(:file_field_xpath, :xpath => "//input[@type='file']")
|
255
256
|
|
256
257
|
link(:open_window, :text => 'New Window')
|
258
|
+
link(:child, :id => 'child')
|
257
259
|
end
|
258
260
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
module PageObject
|
3
|
+
module PersistantBrowser
|
4
|
+
@@browser = false
|
5
|
+
def self.get_browser
|
6
|
+
if !@@browser
|
7
|
+
@@browser = Watir::Browser.new :firefox if ENV['DRIVER'] == 'WATIR'
|
8
|
+
@@browser = Selenium::WebDriver.for :firefox if ENV['DRIVER'] == 'SELENIUM'
|
9
|
+
end
|
10
|
+
@@browser
|
11
|
+
end
|
12
|
+
def self.quit
|
13
|
+
@@browser.quit
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -102,6 +102,7 @@ module PageObject
|
|
102
102
|
# * :name => Watir and Selenium
|
103
103
|
# * :tag_name => Watir and Selenium
|
104
104
|
# * :text => Watir and Selenium
|
105
|
+
# * :value => Watir and Selenium
|
105
106
|
# * :xpath => Watir and Selenium
|
106
107
|
# @param optional block to be invoked when element method is called
|
107
108
|
#
|
@@ -242,6 +243,7 @@ module PageObject
|
|
242
243
|
# * :id => Watir and Selenium
|
243
244
|
# * :index => Watir and Selenium
|
244
245
|
# * :name => Watir and Selenium
|
246
|
+
# * :value => Watir and Selenium
|
245
247
|
# * :xpath => Watir and Selenium
|
246
248
|
# @param optional block to be invoked when element method is called
|
247
249
|
#
|
data/lib/page-object/elements.rb
CHANGED
@@ -1,3 +1,31 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Elements
|
3
|
+
class << self
|
4
|
+
|
5
|
+
#
|
6
|
+
# method to return the collection of tag_name to class mappings
|
7
|
+
#
|
8
|
+
def tag_to_class
|
9
|
+
@tag_to_class ||= {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def type_to_class
|
13
|
+
@type_to_class ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
# method to return the element for a tag_name
|
18
|
+
#
|
19
|
+
def element_class_for(tag_name, type=nil)
|
20
|
+
return type_to_class[type] if type
|
21
|
+
tag_to_class[tag_name.to_sym] || ::PageObject::Elements::Element
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
1
29
|
require 'page-object/elements/element'
|
2
30
|
require 'page-object/elements/link'
|
3
31
|
require 'page-object/elements/text_field'
|
@@ -21,3 +49,4 @@ require 'page-object/elements/option'
|
|
21
49
|
require 'page-object/elements/heading'
|
22
50
|
require 'page-object/elements/paragraph'
|
23
51
|
require 'page-object/elements/file_field'
|
52
|
+
|
@@ -26,5 +26,10 @@ module PageObject
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
|
+
|
30
|
+
::PageObject::Elements.type_to_class[:submit] = ::PageObject::Elements::Button
|
31
|
+
::PageObject::Elements.type_to_class[:image] = ::PageObject::Elements::Button
|
32
|
+
::PageObject::Elements.type_to_class[:button] = ::PageObject::Elements::Button
|
33
|
+
::PageObject::Elements.type_to_class[:reset] = ::PageObject::Elements::Button
|
29
34
|
end
|
30
35
|
end
|
@@ -9,6 +9,14 @@ module PageObject
|
|
9
9
|
end
|
10
10
|
|
11
11
|
protected
|
12
|
+
|
13
|
+
def self.watir_finders
|
14
|
+
super + [:value]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.selenium_finders
|
18
|
+
super + [:value]
|
19
|
+
end
|
12
20
|
|
13
21
|
def include_platform_for platform
|
14
22
|
super
|
@@ -23,5 +31,8 @@ module PageObject
|
|
23
31
|
end
|
24
32
|
end
|
25
33
|
end
|
34
|
+
|
35
|
+
::PageObject::Elements.type_to_class[:checkbox] = ::PageObject::Elements::CheckBox
|
36
|
+
|
26
37
|
end
|
27
38
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'page-object/nested_elements'
|
1
2
|
|
2
3
|
module PageObject
|
3
4
|
module Elements
|
@@ -8,7 +9,7 @@ module PageObject
|
|
8
9
|
# @see PageObject::Platforms::SeleniumWebDriver::Element for the Selenium version of all common methods
|
9
10
|
#
|
10
11
|
class Element
|
11
|
-
include
|
12
|
+
include ::PageObject::NestedElements
|
12
13
|
|
13
14
|
attr_reader :element
|
14
15
|
|
@@ -3,5 +3,13 @@ module PageObject
|
|
3
3
|
class Heading < Element
|
4
4
|
|
5
5
|
end
|
6
|
+
|
7
|
+
::PageObject::Elements.tag_to_class[:h1] = ::PageObject::Elements::Heading
|
8
|
+
::PageObject::Elements.tag_to_class[:h2] = ::PageObject::Elements::Heading
|
9
|
+
::PageObject::Elements.tag_to_class[:h3] = ::PageObject::Elements::Heading
|
10
|
+
::PageObject::Elements.tag_to_class[:h4] = ::PageObject::Elements::Heading
|
11
|
+
::PageObject::Elements.tag_to_class[:h5] = ::PageObject::Elements::Heading
|
12
|
+
::PageObject::Elements.tag_to_class[:h6] = ::PageObject::Elements::Heading
|
13
|
+
|
6
14
|
end
|
7
|
-
end
|
15
|
+
end
|
@@ -9,7 +9,7 @@ module PageObject
|
|
9
9
|
protected
|
10
10
|
|
11
11
|
def self.watir_finders
|
12
|
-
super + [:tag_name, :text]
|
12
|
+
super + [:tag_name, :text, :value]
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.watir_mapping
|
@@ -17,12 +17,14 @@ module PageObject
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.selenium_finders
|
20
|
-
super + [:css]
|
20
|
+
super + [:css, :value]
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.selenium_mapping
|
24
24
|
super.merge({:tag_name => :css})
|
25
25
|
end
|
26
26
|
end
|
27
|
+
|
28
|
+
::PageObject::Elements.type_to_class[:hidden] = ::PageObject::Elements::HiddenField
|
27
29
|
end
|
28
|
-
end
|
30
|
+
end
|