page-object 0.0.2 → 0.0.3
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 +20 -2
- data/features/div.feature +1 -1
- data/features/element.feature +160 -0
- data/features/html/images/circle.png +0 -0
- data/features/html/static_elements.html +8 -0
- data/features/image.feature +32 -0
- data/features/span.feature +37 -0
- data/features/step_definitions/accessor_steps.rb +29 -3
- data/features/step_definitions/element_steps.rb +33 -0
- data/features/support/page.rb +13 -0
- data/lib/page-object/accessors.rb +32 -2
- data/lib/page-object/elements.rb +2 -0
- data/lib/page-object/elements/button.rb +13 -0
- data/lib/page-object/elements/element.rb +1 -0
- data/lib/page-object/elements/image.rb +26 -0
- data/lib/page-object/elements/link.rb +11 -0
- data/lib/page-object/elements/span.rb +12 -0
- data/lib/page-object/platforms/selenium_button.rb +13 -0
- data/lib/page-object/platforms/selenium_element.rb +63 -1
- data/lib/page-object/platforms/selenium_image.rb +22 -0
- data/lib/page-object/platforms/selenium_link.rb +13 -0
- data/lib/page-object/platforms/selenium_table.rb +1 -1
- data/lib/page-object/platforms/watir_element.rb +63 -1
- data/lib/page-object/platforms/watir_image.rb +20 -0
- data/lib/page-object/selenium_page_object.rb +29 -0
- data/lib/page-object/version.rb +1 -1
- data/lib/page-object/watir_page_object.rb +29 -0
- data/page-object.gemspec +2 -2
- data/spec/page-object/accessors_spec.rb +64 -0
- data/spec/page-object/elements/button_spec.rb +11 -0
- data/spec/page-object/elements/element_spec.rb +50 -0
- data/spec/page-object/elements/image_spec.rb +62 -0
- data/spec/page-object/elements/link_spec.rb +11 -0
- data/spec/page-object/elements/span_spec.rb +22 -0
- metadata +22 -4
data/ChangeLog
CHANGED
@@ -1,4 +1,21 @@
|
|
1
|
-
|
1
|
+
== Version 0.0.3 / 2011-06-02
|
2
|
+
* Enhancements
|
3
|
+
* Added support for the following elements
|
4
|
+
* span
|
5
|
+
* image
|
6
|
+
|
7
|
+
* Added the following methods to Element
|
8
|
+
* value
|
9
|
+
* ==
|
10
|
+
* tag_name
|
11
|
+
* attribute
|
12
|
+
* click
|
13
|
+
|
14
|
+
* Updated to use selenium-webdriver 0.2.1
|
15
|
+
|
16
|
+
* Updated to use watir-webdriver 0.2.4
|
17
|
+
|
18
|
+
=== Version 0.0.2 / 2011-05-30
|
2
19
|
* Enhancements
|
3
20
|
* Added support for the following elements
|
4
21
|
* div
|
@@ -6,7 +23,8 @@
|
|
6
23
|
* table
|
7
24
|
* table row
|
8
25
|
* table cell
|
9
|
-
|
26
|
+
|
27
|
+
* Added text method to element
|
10
28
|
|
11
29
|
=== Version 0.0.1 / 2011-05-22
|
12
30
|
* Enhancements
|
data/features/div.feature
CHANGED
@@ -0,0 +1,160 @@
|
|
1
|
+
Feature: Elements
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Link element methods
|
7
|
+
When I retrieve a link element
|
8
|
+
Then I should know it exists
|
9
|
+
And I should know it is visible
|
10
|
+
And I should know its' text is "Google Search"
|
11
|
+
And I should know it is equal to itself
|
12
|
+
And I should know its' tag name is "a"
|
13
|
+
And I should know the attribute "readonly" is false
|
14
|
+
And I should be able to click it
|
15
|
+
|
16
|
+
@watir_only
|
17
|
+
Scenario: Link element methods for watir
|
18
|
+
When I retrieve a link element
|
19
|
+
Then I should know its' value is ""
|
20
|
+
|
21
|
+
|
22
|
+
Scenario: Button element methods
|
23
|
+
When I retrieve a button element
|
24
|
+
Then I should know it exists
|
25
|
+
And I should know it is visible
|
26
|
+
And I should know its' value is "Click Me"
|
27
|
+
And I should know it is equal to itself
|
28
|
+
And I should know its' tag name is "input"
|
29
|
+
And I should know the attribute "readonly" is false
|
30
|
+
And I should be able to click it
|
31
|
+
|
32
|
+
@watir_only
|
33
|
+
Scenario: Button element methods for watir
|
34
|
+
When I retrieve a button element
|
35
|
+
Then I should know its' text is "Click Me"
|
36
|
+
|
37
|
+
Scenario: Check Box element methods
|
38
|
+
When I retrieve a check box element
|
39
|
+
Then I should know it exists
|
40
|
+
And I should know it is visible
|
41
|
+
And I should know its' text is ""
|
42
|
+
And I should know its' value is "1"
|
43
|
+
And I should know it is equal to itself
|
44
|
+
And I should know its' tag name is "input"
|
45
|
+
And I should know the attribute "readonly" is false
|
46
|
+
And I should be able to click it
|
47
|
+
|
48
|
+
Scenario: Div element methods
|
49
|
+
When I retrieve the div element
|
50
|
+
Then I should know it exists
|
51
|
+
And I should know it is visible
|
52
|
+
And I should know its' text is "page-object rocks!"
|
53
|
+
And I should know it is equal to itself
|
54
|
+
And I should know its' tag name is "div"
|
55
|
+
And I should know the attribute "readonly" is false
|
56
|
+
And I should be able to click it
|
57
|
+
|
58
|
+
@watir_only
|
59
|
+
Scenario: Div element methods for watir
|
60
|
+
When I retrieve the div element
|
61
|
+
Then I should know its' value is ""
|
62
|
+
|
63
|
+
@selenium_only
|
64
|
+
Scenario: Div element methods for selenium
|
65
|
+
When I retrieve the div element
|
66
|
+
Then I should know its' value is nil
|
67
|
+
|
68
|
+
Scenario: Radio Button element methods
|
69
|
+
When I retrieve a radio button
|
70
|
+
Then I should know it exists
|
71
|
+
And I should know it is visible
|
72
|
+
And I should know its' text is ""
|
73
|
+
And I should know its' value is "Milk"
|
74
|
+
And I should know it is equal to itself
|
75
|
+
And I should know its' tag name is "input"
|
76
|
+
And I should know the attribute "readonly" is false
|
77
|
+
And I should be able to click it
|
78
|
+
|
79
|
+
Scenario: Select List element methods
|
80
|
+
When I retrieve a select list
|
81
|
+
Then I should know it exists
|
82
|
+
And I should know it is visible
|
83
|
+
And I should know its' text includes "Test 1"
|
84
|
+
And I should know its' value is "option1"
|
85
|
+
And I should know it is equal to itself
|
86
|
+
And I should know its' tag name is "select"
|
87
|
+
And I should know the attribute "readonly" is false
|
88
|
+
And I should be able to click it
|
89
|
+
|
90
|
+
Scenario: Table element methods
|
91
|
+
When I retrieve a table element
|
92
|
+
Then I should know it is visible
|
93
|
+
And I should know its' text includes "Data1"
|
94
|
+
And I should know it is equal to itself
|
95
|
+
And I should know its' tag name is "table"
|
96
|
+
And I should know the attribute "readonly" is false
|
97
|
+
And I should be able to click it
|
98
|
+
|
99
|
+
@watir_only
|
100
|
+
Scenario: Table element methods in watir
|
101
|
+
When I retrieve a table element
|
102
|
+
Then I should know it exists
|
103
|
+
And I should know its' value is ""
|
104
|
+
|
105
|
+
@selenium_only
|
106
|
+
Scenario: Table element methods in selenium
|
107
|
+
When I retrieve a table element
|
108
|
+
Then I should know its' value is nil
|
109
|
+
|
110
|
+
Scenario: Table Cell element methods
|
111
|
+
When I retrieve table cell
|
112
|
+
Then I should know it exists
|
113
|
+
And I should know it is visible
|
114
|
+
And I should know its' text includes "Data4"
|
115
|
+
And I should know it is equal to itself
|
116
|
+
And I should know its' tag name is "td"
|
117
|
+
And I should know the attribute "readonly" is false
|
118
|
+
And I should be able to click it
|
119
|
+
|
120
|
+
@watir_only
|
121
|
+
Scenario: Table Cell element methods in watir
|
122
|
+
When I retrieve table cell
|
123
|
+
Then I should know its' value is ""
|
124
|
+
|
125
|
+
@selenium_only
|
126
|
+
Scenario: Table Cell element methods in selenium
|
127
|
+
When I retrieve table cell
|
128
|
+
Then I should know its' value is nil
|
129
|
+
|
130
|
+
Scenario: Text Field element methods
|
131
|
+
When I retrieve a text field
|
132
|
+
Then I should know it exists
|
133
|
+
And I should know it is visible
|
134
|
+
And I should know its' text includes ""
|
135
|
+
And I should know its' value is ""
|
136
|
+
And I should know it is equal to itself
|
137
|
+
And I should know its' tag name is "input"
|
138
|
+
And I should know the attribute "readonly" is false
|
139
|
+
And I should be able to click it
|
140
|
+
|
141
|
+
Scenario: Image element methods
|
142
|
+
When I get the image element
|
143
|
+
Then I should know it exists
|
144
|
+
And I should know it is visible
|
145
|
+
And I should know its' text includes ""
|
146
|
+
And I should know it is equal to itself
|
147
|
+
And I should know its' tag name is "img"
|
148
|
+
And I should know the attribute "readonly" is false
|
149
|
+
And I should be able to click it
|
150
|
+
|
151
|
+
@watir_only
|
152
|
+
Scenario: Image element methods in watir
|
153
|
+
When I get the image element
|
154
|
+
Then I should know its' value is ""
|
155
|
+
|
156
|
+
@selenium_only
|
157
|
+
Scenario: Image element methods in selenium
|
158
|
+
When I get the image element
|
159
|
+
Then I should know its' value is nil
|
160
|
+
|
Binary file
|
@@ -32,6 +32,11 @@
|
|
32
32
|
page-object rocks!
|
33
33
|
</div>
|
34
34
|
|
35
|
+
<h3>Span</h3>
|
36
|
+
<span id="span_id" name="span_name" class="span_class">
|
37
|
+
My alert
|
38
|
+
</span>
|
39
|
+
|
35
40
|
<h3>Table</h3>
|
36
41
|
<table id='table_id' name='table_name' class='table_class' border='1'>
|
37
42
|
<tr>
|
@@ -46,6 +51,9 @@
|
|
46
51
|
<form method="get" action="success.html">
|
47
52
|
<input id='button_id' name='button_name' class='button_class' type="submit" value="Click Me">
|
48
53
|
</form>
|
54
|
+
|
55
|
+
<h3>Image</h3>
|
56
|
+
<img src="images/circle.png" id="image_id" name="image_name" class="image_class">
|
49
57
|
</body>
|
50
58
|
</html>
|
51
59
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Image
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Getting the image element
|
7
|
+
When I get the image element
|
8
|
+
Then the image should be "106" pixels wide
|
9
|
+
And the image should be "106" pixels tall
|
10
|
+
|
11
|
+
Scenario Outline: Locating an image on the page
|
12
|
+
When I get the image element by "<search_by>"
|
13
|
+
Then the image should be "106" pixels wide
|
14
|
+
And the image should be "106" pixels tall
|
15
|
+
|
16
|
+
Scenarios:
|
17
|
+
| search_by |
|
18
|
+
| id |
|
19
|
+
| class |
|
20
|
+
| name |
|
21
|
+
| xpath |
|
22
|
+
|
23
|
+
@watir_only
|
24
|
+
Scenario Outline: Locating an image on the page with Watir
|
25
|
+
When I get the image element by "<search_by>"
|
26
|
+
Then the image should be "106" pixels wide
|
27
|
+
And the image should be "106" pixels tall
|
28
|
+
|
29
|
+
Scenarios:
|
30
|
+
| search_by |
|
31
|
+
| index |
|
32
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Feature: Span
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Getting the text from a span
|
7
|
+
When I get the text from the span
|
8
|
+
Then the text should be "My alert"
|
9
|
+
|
10
|
+
Scenario Outline: Locating spans on the page
|
11
|
+
When I search for the span by "<search_by>"
|
12
|
+
Then the text should be "My alert"
|
13
|
+
|
14
|
+
Scenarios:
|
15
|
+
| search_by |
|
16
|
+
| id |
|
17
|
+
| class |
|
18
|
+
| xpath |
|
19
|
+
|
20
|
+
@watir_only
|
21
|
+
Scenario Outline: Locating span on Watir only
|
22
|
+
When I search for the span by "<search_by>"
|
23
|
+
Then the text should be "My alert"
|
24
|
+
|
25
|
+
Scenarios:
|
26
|
+
| search_by |
|
27
|
+
| index |
|
28
|
+
|
29
|
+
|
30
|
+
@selenium_only
|
31
|
+
Scenario Outline: Locating span on Watir only
|
32
|
+
When I search for the span by "<search_by>"
|
33
|
+
Then the text should be "My alert"
|
34
|
+
|
35
|
+
Scenarios:
|
36
|
+
| search_by |
|
37
|
+
| name |
|
@@ -88,17 +88,26 @@ When /^I select the radio button$/ do
|
|
88
88
|
end
|
89
89
|
|
90
90
|
When /^I get the text from the div$/ do
|
91
|
-
@
|
91
|
+
@text = @page.div_id
|
92
92
|
end
|
93
93
|
|
94
94
|
Then /^the text should be "([^"]*)"$/ do |expected_text|
|
95
|
-
@
|
95
|
+
@text.should == expected_text
|
96
96
|
end
|
97
97
|
|
98
98
|
When /^I search for the div by "([^"]*)"$/ do |how|
|
99
|
-
@
|
99
|
+
@text = @page.send "div_#{how}".to_sym
|
100
100
|
end
|
101
101
|
|
102
|
+
When /^I get the text from the span$/ do
|
103
|
+
@text = @page.span_id
|
104
|
+
end
|
105
|
+
|
106
|
+
When /^I search for the span by "([^"]*)"$/ do |how|
|
107
|
+
@text = @page.send "span_#{how}".to_sym
|
108
|
+
end
|
109
|
+
|
110
|
+
|
102
111
|
When /^I click the button$/ do
|
103
112
|
@page.button_id
|
104
113
|
end
|
@@ -123,3 +132,20 @@ end
|
|
123
132
|
When /^I retrieve a table element by "([^"]*)"$/ do |how|
|
124
133
|
@element = @page.send "table_#{how}_table"
|
125
134
|
end
|
135
|
+
|
136
|
+
When /^I get the image element$/ do
|
137
|
+
@element = @page.image_id_image
|
138
|
+
end
|
139
|
+
|
140
|
+
Then /^the image should be "([^"]*)" pixels wide$/ do |width|
|
141
|
+
@element.width.should == width.to_i
|
142
|
+
end
|
143
|
+
|
144
|
+
Then /^the image should be "([^"]*)" pixels tall$/ do |height|
|
145
|
+
@element.height.should == height.to_i
|
146
|
+
end
|
147
|
+
|
148
|
+
When /^I get the image element by "([^"]*)"$/ do |how|
|
149
|
+
@element = @page.send "image_#{how}_image"
|
150
|
+
end
|
151
|
+
|
@@ -44,3 +44,36 @@ Then /^I should know it is visible$/ do
|
|
44
44
|
@element.should be_visible
|
45
45
|
end
|
46
46
|
|
47
|
+
Then /^I should know its' text is "([^"]*)"$/ do |text|
|
48
|
+
@element.text.should == text
|
49
|
+
end
|
50
|
+
|
51
|
+
Then /^I should know its' text includes "([^"]*)"$/ do |text|
|
52
|
+
@element.text.should include text
|
53
|
+
end
|
54
|
+
|
55
|
+
Then /^I should know its' value is "([^"]*)"$/ do |value|
|
56
|
+
@element.value.should == value
|
57
|
+
end
|
58
|
+
|
59
|
+
Then /^I should know its' value is nil$/ do
|
60
|
+
@element.value.should be_nil
|
61
|
+
end
|
62
|
+
|
63
|
+
Then /^I should know it is equal to itself$/ do
|
64
|
+
@element.should == @element
|
65
|
+
end
|
66
|
+
|
67
|
+
Then /^I should know its' tag name is "([^"]*)"$/ do |tagname|
|
68
|
+
@element.tag_name.should == tagname
|
69
|
+
end
|
70
|
+
|
71
|
+
Then /^I should know the attribute "([^"]*)" is false$/ do |attr_name|
|
72
|
+
@attr = @element.attribute(attr_name)
|
73
|
+
@attr.should be_false if @attr.is_a? FalseClass
|
74
|
+
@attr.should == "false" if @attr.is_a? String
|
75
|
+
end
|
76
|
+
|
77
|
+
Then /^I should be able to click it$/ do
|
78
|
+
@element.click
|
79
|
+
end
|
data/features/support/page.rb
CHANGED
@@ -49,6 +49,12 @@ class Page
|
|
49
49
|
div(:div_index, :index => 0)
|
50
50
|
div(:div_xpath, :xpath => '//div')
|
51
51
|
|
52
|
+
span(:span_id, :id => 'span_id')
|
53
|
+
span(:span_name, :name => 'span_name')
|
54
|
+
span(:span_class, :class => 'span_class')
|
55
|
+
span(:span_index, :index => 0)
|
56
|
+
span(:span_xpath, :xpath => '//span')
|
57
|
+
|
52
58
|
table(:table_id, :id => 'table_id')
|
53
59
|
table(:table_name, :name => 'table_name')
|
54
60
|
table(:table_class, :class => 'table_class')
|
@@ -67,4 +73,11 @@ class Page
|
|
67
73
|
button(:button_index, :index => 0)
|
68
74
|
button(:button_xpath, :xpath=> "//input[@type='submit']")
|
69
75
|
button(:button_text, :text => 'Click Me')
|
76
|
+
|
77
|
+
image(:image_id, :id => 'image_id')
|
78
|
+
image(:image_name, :name => 'image_name')
|
79
|
+
image(:image_class, :class => 'image_class')
|
80
|
+
image(:image_index, :index => 0)
|
81
|
+
image(:image_xpath, :xpath => '//img')
|
82
|
+
|
70
83
|
end
|
@@ -196,7 +196,7 @@ module PageObject
|
|
196
196
|
# will generate a 'message' and 'message_div' methods
|
197
197
|
#
|
198
198
|
# @param the name used for the generated methods
|
199
|
-
# @param identifier how we find a
|
199
|
+
# @param identifier how we find a div. The valid values are:
|
200
200
|
# :class => Watir and Selenium
|
201
201
|
# :id => Watir and Selenium
|
202
202
|
# :index => Watir only
|
@@ -204,7 +204,7 @@ module PageObject
|
|
204
204
|
# :xpath => Watir and Selenium
|
205
205
|
#
|
206
206
|
def div(name, identifier)
|
207
|
-
define_method(
|
207
|
+
define_method(name) do
|
208
208
|
platform.div_text_for identifier
|
209
209
|
end
|
210
210
|
define_method("#{name}_div") do
|
@@ -212,6 +212,30 @@ module PageObject
|
|
212
212
|
end
|
213
213
|
end
|
214
214
|
|
215
|
+
#
|
216
|
+
# adds two methods - one to retrieve the text from a span
|
217
|
+
# and another to return the span element
|
218
|
+
#
|
219
|
+
# Example: span(:alert, {:id => 'alert'})
|
220
|
+
# will generate a 'alert' and 'alert_div' methods
|
221
|
+
#
|
222
|
+
# @param the name used for the generated methods
|
223
|
+
# @param identifier how we find a span. The valid values are:
|
224
|
+
# :class => Watir and Selenium
|
225
|
+
# :id => Watir and Selenium
|
226
|
+
# :index => Watir only
|
227
|
+
# :name => Selenium only
|
228
|
+
# :xpath => Watir and Selenium
|
229
|
+
#
|
230
|
+
def span(name, identifier)
|
231
|
+
define_method(name) do
|
232
|
+
platform.span_text_for identifier
|
233
|
+
end
|
234
|
+
define_method("#{name}_span") do
|
235
|
+
platform.span_for identifier
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
215
239
|
#
|
216
240
|
# adds a method to retrieve the table element
|
217
241
|
#
|
@@ -255,5 +279,11 @@ module PageObject
|
|
255
279
|
platform.cell_for identifier
|
256
280
|
end
|
257
281
|
end
|
282
|
+
|
283
|
+
def image(name, identifier)
|
284
|
+
define_method("#{name}_image") do
|
285
|
+
platform.image_for identifier
|
286
|
+
end
|
287
|
+
end
|
258
288
|
end
|
259
289
|
end
|