page-object 0.5.4 → 0.5.5
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.
- 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
|